2012-10-03 69 views
0

我想動畫一個列表,它會隱藏在屏幕下方,bottomMargin是一個負值 然後當我點擊一個按鈕,我動畫它,然後動畫完成後「onAnimationEnd」我修改邊距使其停止在動畫結束的位置。Android動畫,一個簡單的linear_interpolator

它的工作好當動畫的時候,我沒有看到任何東西它進入-ve

但在動畫起來,它的去比它有太多,並修改保證金,做一個壞的後效果「因爲它不是阻止它必須」 這裏是我在做什麼

動畫下來:

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 
    <!-- same animation, linear interpolator --> 
    <translate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:toYDelta="25%p" 
     android:duration="500" 
    /> 
</set> 

動畫起來:

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 
    <!-- same animation, linear interpolator --> 
    <translate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:toYDelta="-25%p" 
     android:duration="500" 
    /> 
</set> 

的代碼運行在onAnimationEnd:

MarginLayoutParams params = (MarginLayoutParams) playerLayout.getLayoutParams(); 
if (params.bottomMargin == 0) { 
params.setMargins(0, 0, 0, playerLayout.getHeight()* -1); 
} else { 
params.setMargins(0, 0, 0, 0); 
} 
playerLayout.setLayoutParams(params); 

什麼是錯的! 在動畫中,動畫區域開始正常出現,然後突然上升到比正常位置快上,然後修改邊緣使其突然重新定位到正常位置。

這裏一個視頻的鏈接顯示的問題https://dl.dropbox.com/u/51616029/irrelevant/20121005323.mp4

回答

0

儘量只放置View要在其最終位置的動畫在佈局開始與和其最初的可視性android:visibility="invisible"設置爲不可見(無論是在XML或用setVisibility(INVISIBLE)代碼)。當您準備好動畫時,只需在開始動畫時使視圖可見即可。

onStartAnimation(Animation animation) { 
    myView.setVisible(VISIBLE); 
} 

和動畫可能只是

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:fromYDelta="-100%p" 
    android:toYDelta="0" 
    android:duration="500" 
/> 

這樣你就不必擔心在所有進行復雜的佈局變化。

+0

我做了,就像你看到的,在動畫完成之後,我添加了下面的邊距「params.setMargins(0,0,0,playerLayout.getHeight()* -1);」 後來,我加了這個「params.setMargins(0,0,0,0);」 – AMTourky

+0

我的建議是讓視圖在向下動畫完成後隱形,並且在向上動畫開始之前可見。根本不用擔心調用'setMargin()',因爲這是不必要的。 – happydude

+0

但我想從該佈局的一部分可見 – AMTourky