16

まだソフトウェア レンダリングされているアプリの唯一の部分は、丸いビットマップを描画する必要がある 1 つのビューのレンダリングです。clipPath を使用して、レンダリングする必要があるビットマップを丸い形にクリップしています。

clipPath がハードウェア アクセラレーションではないことは理解していますが、ハードウェア アクセラレーションを使用して同等の機能を提供できるアルゴリズムを探しています。

具体的には、ソース ビットマップの丸いクリッピング領域を作成し、それをキャンバスにレンダリングする必要があります。

4

3 に答える 3

1

clipPath を使用する必要がある場合は、以下のようにハードウェア アクセラレーションをシャットダウンできます。

<application
    android:label="@string/application_name"
    android:hardwareAccelerated="false">

また、アプリケーション、アクティビティ、ウィンドウ、およびビュー レイヤー間でハードウェア アクセラレーションを制御することもできます。詳細情報は、Android 開発 Web サイト のこのハードウェア アクセラレーションの記事に記載されています。

于 2013-07-10T08:11:53.390 に答える
0

ビットマップがあまり変化しない場合は、形状を一度クリップして新しいビットマップにし、クリップしたビットマップを onDraw に描画します。

ソース ビットマップから円を切り取る方法の例を次に示します。

Bitmap bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Canvas canvas = new Canvas(bitmap);
paint.setColor(Color.RED);
// Draw your shape here
canvas.drawCircle(cx, cy, radius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));    
canvas.drawBitmap(sourceBitmap, 0, 0, paint);
于 2013-05-11T12:05:12.103 に答える