2012-08-15 8 views
16

まだソフトウェアレンダリングされているアプリケーションの唯一の部分は、ラウンドビットマップを描画する必要がある1つのビューのレンダリングです。私は、roundPathにレンダリングする必要があるビットマップをクリップするのにclipPathを使用しています。Android clipPath相当のハードウェアアクセラレーション表示

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

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

答えて

0

あなたは私はわからないけれども、ハードウェアが加速され、これに試みることができる:

のonCreateで

http://developer.android.com/reference/android/graphics/Paint.html#setXfermode(android.graphics.Xfermode)

  • プット:

    • は(bitmapPaintと呼ばれる)の塗料を作成することがsetXfermodeを使用していますAvoidXfermode、その非難され、それはかなりうまくいく。 (240のような)高い耐性と白の色とターゲットモードonLayoutで

    を渡し:

    • ビュー
    • はの上で内側にあなたの円を描くと同じサイズのビットマップを作成onDrawできれいなボーダー

    のためのアンチエイリアスを使用して白のキャンバス、:

    • は、
    • 今あなたのペイントキャンバスに白い円でビットマップを描画するには、のonCreate

    ビットマップは唯一の円の内側にレンダリングされるべきで作成しbitmapPaintを使用してペイントキャンバス内のあなたのビットマップを描画します。

  • 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); 
    
    1

    から円をクリップする方法の例です。

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

    さらに、アプリケーション、アクティビティ、ウィンドウ、およびビューのレイヤー間でハードウェアアクセラレーションを制御することもできます。詳細情報はHardware Acceleration article on Android Development web siteです。

    関連する問題