スムーズなスクロール機能を備えたカスタム ビューを実装したいと思います。Android View.onDraw() には常にクリーンな Canvas があることを読みました。オフスクリーン ビットマップを作成すると、オフスクリーン ビットマップの描画にさらに時間がかかります。したがって、ビュー描画キャッシュを使用することを考えています。
@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 で開発しているので、ハードウェア アクセラレーションをオンにします。しかし、ドキュメントによると、ビューはハードウェア テクスチャにキャッシュされています。ハードウェア アクセラレーション環境で描画キャッシュが本当に必要ですか?