如何解决通过调用onDraw经常刷新的自定义ImageView的优化
|| 我创建了一个自定义ImageView,并在其onDraw方法中需要根据用户交互(如触摸)绘制一些位图。一切运行良好,但是随着我开始添加越来越多的位图,应用程序的运行速度实际上变慢了。 这是我在自定义ImageView的onDraw中所做的@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.e(TAG,\"onDraw called\");
for (int i=0; i < bitmapList.size(); i++){
drawBitmap(canvas,bitmapList.get(i));
}
}
如您所见,每次当位图的数量超过4-5时,自然调用onDraw时,我都会重绘List中的所有位图,该操作将变得非常昂贵,并使应用程序变慢。
如何解决这个问题的任何解决方案?
可以在其他线程中调用drawBitmap降低操作成本吗?
有没有办法保留前一个画布的副本,然后将其简单地还原到onDraw中,而不是再次绘制所有位图?
本质上,问题在于刷新具有大量动态图像的View及其优化。
解决方法
您应该创建一个“ѭ1”,其大小必须等于“ѭ2”的图像大小,并在此位图上从“ѭ3”绘制所有位图一次。在每个“ 4”通话中,您都应仅绘制此位图。当“ 3”改变时,必须重新创建此附加位图。
, 您可以使用后缓冲图像在更改时将所有图像绘制到其中,然后在onDraw()中仅将后缓冲图像绘制到屏幕上
// create backbuffer and draw it as seldom as possible
final Bitmap bufferBitmap = Bitmap.createBitmap(320,240,Bitmap.Config.ARGB_8888);
final Canvas bufferCanvas = new Canvas(bufferBitmap);
for (int i=0; i < bitmapList.size(); i++){
drawBitmap(bufferCanvas,bitmapList.get(i));
}
// draw the buffered image as often as needed
canvas.drawBitmap(bufferBitmap ...);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。