调整全局动画时长引起的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调整全局动画时长引起的问题相关的知识,希望对你有一定的参考价值。

参考技术A android可以在开发者选项-动画程序时长调整修改动画缩放时间,也可以关闭动画。如图:

修改之后会影响Animator,不影响Animation。如果关闭动画,也会影响Lottie动画。

在创建窗口或者动画缩放改变之后,系统会调用ValueAnimator. setDurationScale设置app全局的缩放比例,并把值保存到sDurationScale。

在ValueAnimator.doAnimationFrame方法计算动画,获取经过缩放的时间间隔,如果时间间隔为0,则标记为结束,整个动画也就结束了。立刻触发AnimatorListener的onAnimationStart和onAnimationEnd方法

LottieAnimationView在初始化时会判断系统的缩放是否为0,并设置到LottieDrawable.systemAnimationsEnabled。

在调用playAnimation方法时,如果systemAnimationsEnabled为false则会直接直接调用endAnimation方法。立刻触发AnimatorListener的onAnimationStart和onAnimationEnd方法

反射调用ValueAnimator的静态方法setDurationScale,把sDurationScale设置为1.0f

反射从LottieAnimationView获取lottieDrawable,然后反射设置lottieDrawable.systemAnimationsEnabled为true

修改Settings.Global.ANIMATOR_DURATION_SCALE需要权限android.permission.WRITE_SECURE_SETTINGS,但是这个权限只能系统app申请,所以普通app不能修改这个属性

UITableViewController 滚动引起的cocos2d动画暂停问题的解决

UITableViewController 滚动引起的cocos2d动画暂停问题的解决

之前在使用UITableViewController进行滚动时,cocos2d的动画会暂停,直至滚动完毕才会继续动画。

后来发现可以这样解决,想要了解更多,请查阅NSRunLoop相关知识。

复制代码
// .h

 NSTimer* m_timer;

// .m
- (void)updateCCDirector { [[CCDirector sharedDirector] drawScene]; if (!self.tableView.dragging) { [m_timer invalidate]; m_timer = nil; } } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { if (m_timer == nil) { m_timer = [NSTimer scheduledTimerWithTimeInterval:1.0/60 target:self selector:@selector(updateCCDirector) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:m_timer forMode:NSRunLoopCommonModes]; } }

 

以上是关于调整全局动画时长引起的问题的主要内容,如果未能解决你的问题,请参考以下文章

三星手机怎么减少动画时间

全局减慢 Flutter 中的动画

Focusky教程 | 帧的播放时间太长,该如何调整?

42 vue3过渡和动画属性控制过渡时长

animate默认时长所带来的问题及解决

取消ObjectAnimator动画引起的一个小问题