2013-11-03 152 views
5

我試圖做一個非常簡單的向上滑動列表視圖,當用戶單擊屏幕底部的按鈕時顯示該列表視圖。下面是它應該是什麼樣子:如何從屏幕底部「向上滑動」Android上的視圖?

sliding thingy

而在HTML/JS的完整實現http://jsbin.com/utAQOVA/1/edit

我試着使用RelativeLayout到列表中的位置就在按鈕的下方,並把那整個事情成一個包裝,然後動畫上/下(與上面的JSBin相同)。

問題在於,即使我將其滑動,開始時不可見的底部部分也會被剪切。 Evern如果我最初顯示下面的屏幕顯示的列表的一部分,底部部分會在上移時被剪切,並且只顯示最初可見的部分。

clipping

什麼是做這種動畫的正確方法嗎?

Here's a relevant portion of the layout

編輯:一個簡短的討論(在接受答案的評論)後,我已經刪除了周圍的是動畫,我只是改變了ListView的高度部分的包裝LinearLayout解決了這個,它將按鈕向上推。

回答

4

的問題,你有可能來自ListView如何做自己的佈局,基本上它適合於屏幕上可用的大小,並繪製該部分,因爲你創建ListView沒有高度或非常小的高度,它的大小。你可以用兩種方法解決這個問題:

  1. 替換爲一個簡單的LinearLayout ListView控件 - 充滿你列出項的所有 ,我會做這個,如果你不具備 名單上的許多項目 - 然後優點的ListView通過簡單的LinearLayout 是微不足道的。
  2. 使用ValueAnimator並在動畫時更新 ListView的高度屬性&的位置。

從我在評論中提到改編後一個ValueAnimator應該是這樣的:

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(); 
     } 
    }); 
  • 我不知道,如果使用setTranslationY是這個問題的正確方法或許你應該使用負的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

你正在尋找看起來像this.-

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

你可以運行它存儲它的動畫XML資源的動畫,和doing.-

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嗎?我猜是有一個父視圖剪裁你的relativelayout。你可以嘗試'setClipChildren'爲false。 – ssantos

+0

添加到問題底部的鏈接 –

相關問題