有很多答案都指向预缩放位图。这非常重要,如果可以的话,你应该这样做,但是在尝试了几种不同的方法之后,我体验到的最大性能提升是创建一个视图并覆盖 onDraw 方法。
该类可以像这样简单:
public class DTImageView extends View {
public Bitmap imageBitmap;
public DTImageView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(imageBitmap != null)
canvas.drawBitmap(imageBitmap, 0, 0, null);
}
}
使用预缩放位图调用代码:
DTImageView bgImageView = new DTImageView(context);
bgImageView.imageBitmap = Bitmap.createScaledBitmap(bitmap,width,height,true);
此时,您可以将此视图添加到它所属的视图层次结构中。在我的例子中,我的视图层次结构有一个 bgImage、一个所有其他功能发生的中间地带,以及 fgImage。
使用 android sdk 工具 Hierarchy Viewer 来分析应用程序并查看每个视图的绘制速度。我的应用程序花了 30-40 毫秒绘制 bgImage 和 fgImage。预缩放和覆盖 onDraw 将 30-40 毫秒减少到大约 1.5 毫秒。
这是我之前和之后的一个视图的 Draw 性能的屏幕截图:
前:
后: