2013-11-03 19 views
5

私は本当にシンプルなスライドを作成しようとしていますリストビューは、ユーザーが画面の下部にあるボタンをクリックすると表示されます。ここではそれがどのように見えるべきかです:アンドロイドの画面を画面の下から「スライドアップ」するにはどうすればよいですか?

sliding thingy

そして私はちょうどボタンの下にリストを配置し、にその全部を入れてRelativeLayoutを使用しようとしたhttp://jsbin.com/utAQOVA/1/edit

HTML/JSでの完全な実装をラッパーを作成し、それを上/下にアニメートします(上記のJSBinと同じです)。

問題は、スライドさせても、最初に表示されていないボトム部分が何らかの形でクリップされてしまうことです。最初に表示されていた部分だけが表示され、下の部分がクリップされて表示されます。アニメーションのこの種を行うための適切なアプローチであるもの

clipping

Here's a relevant portion of the layout

編集:(受け入れ答えのコメントで)簡単な説明の後、私はアニメーションと私は単にListViewの高さを変更された部分の周りにラッピングLinearLayoutを削除することによって、これを解決してきましたこれはボタンを押し上げます。

答えて

4

問題あなたをdoing.- ListViewが独自のレイアウトをどのように行うかは、基本的に画面上で利用可能なサイズに適合し、その部分をペイントします。また、高さや非常に小さい高さを持たずにListViewを作成するので、保持します。次の2つのアプローチでこれを解決することができます。

  1. が簡単なのLinearLayoutを持つListViewの置き換え - あなたがアイテムをリストのすべて でいっぱいにあなたが リストに多くのアイテムを持っていない場合、私はこれを行うだろう - そして利点単純なLinearLayoutのListViewの は無視できます。
  2. ValueAnimatorを使用して、アニメーション中に ListViewの位置&の高さプロパティを更新します。多分あなたがすべきsetTranslationYを使用すると、この質問のための正しい方法であれば

    ValueAnimator va = ValueAnimator.ofInt(0, height); 
        va.setDuration(700); 
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
         public void onAnimationUpdate(ValueAnimator animation) { 
          Integer value = (Integer) animation.getAnimatedValue(); 
          v.getLayoutParams().height = value.intValue(); 
          v.setTranslationY(-value.intValue()); 
          v.requestLayout(); 
         } 
        }); 
    
    • は私がわからないか:私はコメントで述べたポストから適応

ValueAnimatorは次のようになります。負のmarginTop値を使用する(レイアウトによって異なる)

+0

私はすでに動きのためにTransitionAnimatorを使用していますが、ValueAnimatorを使用して両方のアニメーションを同時に実行できる方法がありますか? –

+0

私はValueAnimatorのみを使用し、このスレッドで例を確認します: http://stackoverflow.com/questions/11935216/animation-of-height-of-linearlayout-container-with-valueanimator – Raanan

+1

私は問題を理解していると思います今。私は 'ValueAnimator'だけを使うようにアプリを変更しましたが、' ListView'の 'heigth'を愚かな任意の高い数値(10000のような)に設定しても、高さは変わりませんが、Yポジション。 –

0

あなたはあなたがそれはそれをアニメーションXMLリソースを格納し実行することができますthis.-

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="100%p" 
    android:toYDelta="0" /> 

のようになります探しているアニメーション、および

Animation anim = AnimationUtils.loadAnimation(this, R.anim.animId); 
yourView.startAnimation(anim); 
+0

私は 'var animation = new TranslateAnimation(0、0、-600、0);を実行しようとしました。 animation.Duration = 1000; animation.FillAfter = true; '、それは同じことを実現しますか?そのため、ビューの下部はまだクリップされています。 –

+0

あなたはレイアウトXMLを投稿できますか?私は親のビューがあなたの相対的な輪郭を切り取っていることを推測しています。あなたは 'setClipChildren'をfalseにしようとすることができます。 – ssantos

+0

質問の末尾にリンクを追加 –

関連する問題