我想實現具有平滑滾動功能的自定義視圖。我已閱讀Android View.onDraw() always has a clean Canvas。通過構建一個離屏位圖,它甚至需要更多的時間來繪製離屏位圖。因此,我想到了使用視圖繪圖緩存。在VIew.onDraw()上使用視圖的drawingCache進行平滑滾動
@Override
public void onDraw(Canvas canvas){
long start = System.nanoTime();
if(redrawAll){
drawFullScreen(canvas);
handler.post(new Runnable(){
@Override
public void run() {
cachedBitmap = SampleView4.this.getDrawingCache();
}
});
}
else{
if(cachedBitmap != null && !cachedBitmap.isRecycled()){
canvas.drawBitmap(cachedBitmap ,scrollByX, scrollByY, p);
drawPartOfScreen(canvas, scrollByX, scrollByY);
}
handler.post(new Runnable(){
@Override
public void run() {
cachedBitmap = SampleView4.this.getDrawingCache();
}
});
}
Log.d(TAG, "drawTiles take: "+(System.nanoTime() - start) + " ns");
}
它可能工作,但有奇怪的行爲。某些時候,緩存的Bitmap
在onDraw()
之後沒有任何變化,因此看起來很奇怪。
而且,主要的問題是性能沒有太大的不同,只需要每次查看滾動時調用drawFullScreen(canvas);
。
我在正確的軌道上嗎?我已經開發了Android 4,所以我打開硬件加速。但文檔表示該視圖已經緩存在硬件紋理中。我真的需要在硬件加速環境中繪製緩存嗎?