问题描述
||
我创建了一个自定义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 ...);