通过调用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 ...);
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...