有很多答案指出预缩放位图。这是非常重要的,如果可以的话,你应该这样做,但是在尝试了几个不同的事情之后,我所经历的最大性能增益是创建视图并覆盖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毫秒。
这里是我的观点一个绘图性能的截图前后:
BEFORE:
AFTER:
你能上传背景图片?如果它们是黑色阴影,可以使用Photoshop将它们删除,然后将其手动添加到xml文件中。或者任何其他重复的颜色。 –