今天在使用TranslateAnimation
位移一个LinearLayout
时,发现动画完成后又会自动回到初始的状态,设置了fillAfter
也不太管用。
仔细研究了一下,发现这种现象很正常,因为TranslateAnimation
只负责实现位移动画效果,并不会真正的改变LinearLayout
的位置,所以需要加一个AnimationListener
,在动画结束(onAnimationEnd()
)后,通过设置LayoutParam
里相关属性来改变LinearLayout
位置才行。
1 2 3 4 5 6 7 |
@Override protected void onAnimationEnd() { super.onAnimationEnd(); FrameLayout.LayoutParams ll = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.FILL_PARENT); ll.setMargins(-50, 0, 0, 0); main_layout.setLayoutParams(ll); } |
具体的Margin
的数值,根据实际需要进行调整即可。也可以直接设置控件的起始X,Y坐标即可。