2013-05-04 64 views
0

我必須通過編程實現(子)佈局翻譯動畫,因爲要在運行時確定要翻譯的距離。例如,我已經設置了以下翻譯動畫動態佈局設計

TranslateAnimation tanim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 100); 

例如,向下滑動佈局。

問題1:動畫結束後,此佈局將恢復到其原始位置。我應該設置什麼來維持其立場?我懷疑這是由於佈局移出父佈局(父佈局具有參數layout_width="wrap_content")造成的。如果是這種情況,我如何調整父級佈局以適應子佈局更改?

問題2:我是否必須提供自定義插補器類以實現減速效果?如果是的話,你知道我在哪裏可以找到一個例子嗎?在XML中我可以做到這一點

android:interpolator="@android:anim/accelerate_interpolator" 

是否有一個相當於Android的代碼以編程方式實現加速/減速的效果呢?

+2

您必須將佈局的佈局參數設置爲新的位置,因爲'Translate Animation'只是移動像素而不是視圖/佈局,事實上您的佈局將處於原始位置但不可見 – 2013-05-07 07:18:45

+0

這就是實際上我現在有一個問題。你能舉一些例子說明如何將我的點擊敏感區域向原始佈局移動100dp? – Neoh 2013-05-08 02:38:42

+0

是的,這裏是一個完整的答案,我給了例子代碼http://stackoverflow.com/a/15880375/1939564 – 2013-05-08 08:05:30

回答

2

要保留動畫後的位置,您需要使用fillAfter屬性。而且是有加速和公共API

TranslateAnimation tanim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 100); 
tanim.setFillAfter(true); 
tanim.setInterpolater(new DecelerateInterpolator()); 
//tanim.setInterpolater(new AccelerateInterpolator()); 

內減速插入器類查看Animation docs關於fillAfter信息和Interpolator docs對於內置在系統內插值對象的列表。

+1

** fillAfter **只是保持像素的運動不是實際的佈局,你必須設置'佈局參數「的視圖/佈局將其移動到新的位置 – 2013-05-07 07:14:17