Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义动画_Android_Animation_Android Canvas - Fatal编程技术网

Android自定义动画

Android自定义动画,android,animation,android-canvas,Android,Animation,Android Canvas,我正在创建一个需要设置动画的自定义微调器。微调器由我使用画布和路径绘制的大约10个形状组成。每个形状都应该单独设置动画,并且每个形状都是在单独的时间绘制的。每隔一段时间就会绘制一个新的形状,而其他形状仍在进行动画循环,因此您可以将一个形状的动画设置为10,然后将其反向设置为0 我现在通过在onDraw方法中绘制这些形状来实现这一点。每次I invalidate()都会调用onDraw,而invalidate()是从递归方法中调用的,每40毫秒使用一个postDelay()来获得所需的动画。这一切

我正在创建一个需要设置动画的自定义微调器。微调器由我使用画布和路径绘制的大约10个形状组成。每个形状都应该单独设置动画,并且每个形状都是在单独的时间绘制的。每隔一段时间就会绘制一个新的形状,而其他形状仍在进行动画循环,因此您可以将一个形状的动画设置为10,然后将其反向设置为0

我现在通过在onDraw方法中绘制这些形状来实现这一点。每次I invalidate()都会调用onDraw,而invalidate()是从递归方法中调用的,每40毫秒使用一个postDelay()来获得所需的动画。这一切都有点工程,但我可以看到CPU的使用急剧上升,约10-15秒后,整个事情研磨停止。所以很明显有些地方出了问题。。可能这根本不是尝试动画的正确方式

我想我的问题是-你认为哪里出了问题,为什么?还有,在画布上设置动画的正确方法是什么

编辑:

编辑2:


看起来我的CPU使用率很高是因为重用了Path对象。不太清楚为什么,但是放弃重用对象并在onDraw方法之间重新创建它们已经极大地提高了性能。在运行spinner动画的10-15分钟内,CPU的使用率仍然会上升到5-10%,但这与我在一分钟内体验到的60-80%的CPU使用率完全不同。

我不会做后期延迟,我会使用choreographer。但很可能你只是有一个非常低效的onDraw方法。您是否尽可能地使用双缓冲和最小化重画?不能使用choreographer作为目标API 11。onDraw可能效率低下-我每次都在绘制所有形状,因为它们的不透明度每40毫秒改变一次。。从数组列表中获取不透明度,该数组列表在调用invalidate()之前计算。如果更改的只是它们的不透明度,请预先询问形状到内存中的位图。如果我理解正确,你建议我绘制形状,将它们保存为内存中的位图,然后在每次绘制时更改每个位图的不透明度?也许你知道一些代码或教程可以帮助我?另外,如果我用形状创建位图并在以后更改不透明度,这不会改变整个位图的不透明度,而不是我用drawPath()绘制的实际形状吗?