7

onDraw()こんにちは、オフスクリーン キャンバス/ビットマップに描画してハードウェア アクセラレーションを利用できるかどうか、またはメソッド内で描画する必要があるかどうか疑問に思っていました。View

たとえば、次のようにしてオフスクリーン ビットマップに描画します。

Bitmap.Config config = Bitmap.Config.ARGB_8888;
Bitmap buffer = Bitmap.createBitmap(200, 200, config);
Canvas canvas = new Canvas(buffer);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, paint);

ただしcanvas.isHardwareAccelerated()、 false を返し、描画は以下に比べて遅くなります:

protected void onDraw(Canvas canvas) {

    Paint paint = new Paint();
    paint.setColor(Color.RED);

    canvas.drawLine(0, 0, 100, 100, paint);
}

wherecanvas.isHardwareAccelerated()は true を返します。ハードウェア アクセラレーションを利用しながらビットマップに描画する方法はありますか? または、onDraw メソッドで画面に直接描画する必要がありますか?

助けてくれてありがとう:)私はJavaでBufferedImageオフスクリーンに描画できることを知っています。それはハードウェアアクセラレーションになりますが、電話では同じではないかもしれません...

4

1 に答える 1

4

最初のケースでは、キャンバスを作成するため、ハードウェア レイヤーによってバックアップされません。また、現時点では、任意のキャンバスで HWA を有効にすることはできません。キャンバスは HWA ビューに属している必要があります。

一方、ビューはシステムのハードウェア機能にアクセスできます。setLayerType( LAYER_TYPE_HARDWARE)ドキュメントで説明されているように呼び出すことで、それを使用できます。

ビューにハードウェア レイヤーがあることを示します。ハードウェア レイヤーは、ハードウェア固有のテクスチャ (通常、OpenGL ハードウェア上のフレーム バッファー オブジェクトまたは FBO) によってサポートされ、Android のハードウェア レンダリング パイプラインを使用してビューをレンダリングしますが、ビュー階層に対してハードウェア アクセラレーションがオンになっている場合のみです。ハードウェア アクセラレーションをオフにすると、ハードウェア レイヤーはソフトウェア レイヤーとまったく同じように動作します。

また、パフォーマンスの問題はレンダリング部分に多く当てはまり、描画にはあまり当てはまりません。すべての描画操作は Picture オブジェクトとして記録されます。HWA が重要な役割を果たすレンダリング操作です。

于 2013-02-09T05:37:07.917 に答える