使用TranslateAnimation特效后view會回到原來的位置,使用setFillAfter(true)后view位置不會返回但是view的實際位置還是原來的。
可以設置setAnimationListener在動畫效果結束之后再將view進行位移,但是onAnimationEnd是在動畫效果執行之后再執行的所以位移
view會造成布局閃一下可以使用clearAnimation()可以解決問題
TranslateAnimation translateAnimation = new TranslateAnimation(0.0f, 0.0f,0.0f,-60.0f); translateAnimation.setDuration(500); translateAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { view.clearAnimation(); int left = view.getLeft(); int top = view.getTop()-60; int width = view.getWidth(); int height = view.getHeight(); view.layout(left, top, left+width, top+height); } });
參考:http://www.cnblogs.com/eoiioe/archive/2012/08/29/2662546.html
http://stackoverflow.com/questions/8411903/android-translateanimation-on-button-flickers
PS:網上有人測出此方法在2.3中可能會異常
http://www.eoeandroid.com/forum.php?mod=redirect&goto=findpost&ptid=63857&pid=642522
另付方法如下
TranslateAnimation translateAnimation = new TranslateAnimation(0.0f, 0.0f,0.0f,-60.0f); translateAnimation.setDuration(500); translateAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { int left = view.getLeft(); int top = view.getTop()-60; int width = view.getWidth(); int height = view.getHeight(); view.layout(left, top, left+width, top+height); TranslateAnimation anim = new TranslateAnimation(0,0,0,0); view.setAnimation(anim); } });
最后還有其他解決方法,有興趣的自己看看http://bbs.csdn.net/topics/360035885