オフスクリーン ビットマップ + キャンバスを作成し、その中に小さなビットマップをたくさん描画してから、ビューに描画しています。isHardwareAccelerated() メソッドは、キャンバスに対して false を返します。
mBitmap = new Bitmap(500, 500, Bitmap.Config.RGB_565);
mCanvas = new Canvas(mBitmap);
mCanvas.isHardwareAccelerated(); // false
View の onDraw() メソッドで指定されたキャンバスがハードウェア アクセラレーションされていることがわかります。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.isHardwareAccelerated(); // true
// My current approach, but maybe better to draw directly
// to the view's canvas if it's hardware accelerated?
canvas.drawBitmap(mBitmap, ...);
}
オフスクリーン キャンバスでこれをオンにできるかどうか疑問に思っています。
また、高速化されない場合は、オフスクリーンのキャンバスを気にするのではなく、ビューのハードウェア アクセラレーション キャンバスに直接描画する必要があるかどうかも疑問に思っています。最初にすべてをオフスクリーンに描画する方が速いと思いました。
これをテストするには、コードを再編成する必要があります。画面外のものに明らかなものがないかどうか疑問に思っています。
ありがとう
- - - - アップデート - - - - - - - - - - - - - - - - - -
オフスクリーン キャンバスを使用する代わりに、onDraw() でビューのキャンバスに直接描画するように描画コードをリファクタリングしました。パフォーマンスははるかに優れています。
オフスクリーン キャンバスのハードウェア アクセラレーションを有効にするとなお良いでしょうが、その使用例は間違いなくたくさんあります。