最近想做一个自定义的动画效果,第一个想到的方式是继承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,什么什么的……
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。