坑!为什么View.startAnimation不起作用?

最近想做一个自定义的动画效果,第一个想到的方式是继承Animation,利用它的applyTransformation这个方法来实现,其实也可以自己写线程,定时抛一个事件来处理,其实是一样的,只是直接继承这个很方便。

// 先定义一下动画
Animation myAnimation = new Animation() {
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        // interpolatedTime: [0.0, 1.0] 表示动画执行进度
        // 利用这个值,做一点自己想做的事情就好了
    }
};

myAnimation.setDuration(500);
someView.startAnimation(myAnimation);

理论上来说,这样调用完就ok了,接下来系统会调用applyTransformation来做我想做的事情,结果却不起作用。

我还试了一下将上面这一坨代码放到post(Runnable)去执行,结果依然不行。

在三观都快崩溃的时候,发现,我整个someView好像是invisible的,可能和这个有关,我就换了一个别的View来start这个动画。

诶!就TM好了……

其实这里不管什么view来startAnimation都是一样的,只是想借用Animation的applyTransformation来做一些事情。

但是没想到startAnimation的时候,如果这个View是不可见的,或者是gone的,就会导致传进去的Animation对象不执行。嗯,这是一个坑。

看了一下View里面的源码,发现确实有一些地方判断了如果不是visible的,那么就不调用invalidate方法,也就不会去处理Animation的事情。

以后startAnimation的时候,一定要选一个总是可见的View哦,比如topBar,什么什么的……

未经允许不得转载:我爱IT聚乐部 » 坑!为什么View.startAnimation不起作用?

打赏作者
很喜欢这篇文章,打赏犒劳一下作者,以此激励作者更多创作;

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址