android 平移动画闪烁问题

当我们应用android平移动画时,一般会给动画一个监听,当动画结束时,会将view的位置重新绘制到我们想要的位置,因为平移动画并没与真的改变控件的实际位置.
代码如下:

      Animation animation = new TranslateAnimation(0, 0, 0, -mTop);
      animation.setDuration(ANI_TIME);
      animation.setAnimationListener(new Animation.AnimationListener() {
                                    @Override
                                    public void onAnimationStart(Animation animation) {

                                    }

                                    @Override
                                    public void onAnimationEnd(Animation animation) {
                                         //动画结束后更新view到终点位置
                                         mTopView.layout(left, top, right, bottom);
                                    }


                                    @Override
                                    public void onAnimationRepeat(Animation animation) {

                                    }
                                });
      mTopView.startAnimation(animation);                          

但是实际使用的时候,当更新实际位置的时候,view会有跳动,在stackoverflow中有人贴出了解决方案
代码如下:

      Animation animation = new TranslateAnimation(0, 0, 0, -mTop);
      animation.setDuration(ANI_TIME);
      animation.setAnimationListener(new Animation.AnimationListener() {
                                    @Override
                                    public void onAnimationStart(Animation animation) {

                                    }

                                    @Override
                                    public void onAnimationEnd(Animation animation) {
         
         //防止跳动                            
        TranslateAnimation animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, 0.0f);
        animation.setDuration(1);
        mTopView.startAnimation(animation);
                                         //动画结束后更新view到终点位置
                                         mTopView.layout(left, top, right, bottom);
                                    }


                                    @Override
                                    public void onAnimationRepeat(Animation animation) {

                                    }
                                });
      mTopView.startAnimation(animation);    

在实际写的时候,偶然发现另一种方式也是有效的,不过这种有点违反直觉,就是倒着写动画,先把view更新到终点位置,代码如下:

      //由于更新到终点位置,坐标参考以终点为参考系
      Animation animation = new TranslateAnimation(0, 0, mTop, 0);
      animation.setDuration(ANI_TIME);
      mTopView.startAnimation(animation);
      //更新到终点位置
      mTopView.layout(left, top, right, bottom);     

但是,为何出现view跳动的原因一直没找到分析的文章,若有人知道望请告知.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,844评论 25 709
  • 转载一篇高质量博文,原地址请戳这里转载下来方便今后查看。1 背景不能只分析源码呀,分析的同时也要整理归纳基础知识,...
    Elder阅读 1,969评论 0 24
  • 概述 在Android开发的过程中,View的变化是很常见的,如果View变化的过程没有动画来过渡而是瞬间完成,会...
    小芸论阅读 39,099评论 18 134
  • 8.1 评估状况(Taking Stock) 游戏化分为两种不同的类型,实操型和感受型。当人们谈到游戏化时,他们所...
    洪智阅读 308评论 0 0
  • 在一个阴雨绵绵的清晨 我看见了你闪烁的脸庞 回到家乡回到梦里 回到我梦寐以求的你的身旁 又一个阴雨绵绵的清晨 我躲...
    晏叔阅读 328评论 1 5