TranslateAnimation動畫結束后View的位移


使用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

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM