2012-06-09 6 views
6

私は2つのビットマップの背景foregroundを持っています。別のCanvasを使用せずに背景にビットマップフォアグラウンドを描画するにはどうすればよいですか?リソースから別のビットマップを描画します

ソリューション:

1)まず、追加のオプションを使用して、リソースからビットマップを作成するにはARGB_8888

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

2)onDraw()関数ドローグラフィック

内部ビットマップ

Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.background, options); 
Bitmap foreground = BitmapFactory.decodeResource(getResources(), R.drawable.foreground, options); 

3)を宣言します

protected void onDraw(Canvas canvas)  
{ 
    canvas.drawColor(Color.White); 

    Paint paint = new Paint(); 
    canvas.drawBitmap(background, 0, 0, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 
    canvas.drawBitmap(foreground, 0, 0, paint); 
} 

そしてSoxxehが言ったように、これは情報の非常に良いソースです:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html

+1

このソリューションは機能するのですか、それとも質問しましたか? –

答えて

5

このお試しください:

canvas.drawBitmap(backgroundImageBitmap, 0.0f, 0.0f, null); 
canvas.drawBitmap(foregroundImageBitmap, 0.0f, 0.0f, null); 

第二の画像(前景画像)は、アルファ側面を持っている必要がまたはあなたがそれを見ることができません。

+0

フォアグラウンドビットマップのこれらのアルファアスペクトをAndroidで設定するにはどうすればよいですか? – Kris

+1

ビットマップを作成するときは、RGBA_8888パラメータを与えてから、通常どおりに描画します(背景色は設定しないでください)。 [Bitmap.Config](http://developer.android.com/reference/android/graphics/Bitmap.Config.html)を参照してください。 [この例](http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html)にもいくつかのアイデアがあります。 – Eric

+0

ありがとう!最後に動作します! – Kris

1

ImageViewを使用する場合は、最初のビットマップを背景として、2番目のビットマップを画像ソースとして設定できます。

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background" 
    android:src="@drawable/foreground"/> 
+0

ImageViewを使用しない場合はどうなりますか? –

+0

- FrameLayoutでは、setForeground()を使用してフォアグラウンドを指定できます。 - LayerDrawableを使用して、複数の描画可能オブジェクトを重ねることもできます。 - そうでなければ、エリックのアプローチに従います。 – jakk

関連する問題