有很多答案指出預縮放位圖。這是非常重要的,如果可以的話,你應該這樣做,但是在嘗試了幾個不同的事情之後,我所經歷的最大性能增益是創建視圖並覆蓋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: ![Using setImageBitmap instead of overriding onDraw.](https://i.stack.imgur.com/gYXzy.jpg)
AFTER: ![Using the above DTImageView which simply overrides OnDraw](https://i.stack.imgur.com/XjB7L.jpg)
你能上傳背景圖片?如果它們是黑色陰影,可以使用Photoshop將它們刪除,然後將其手動添加到xml文件中。或者任何其他重複的顏色。 –