2012-06-09 22 views
6

我有兩個位圖,背景前景。如何在不使用其他Canvas的情況下在背景上繪製位圖前景?從另一個資源中繪製位圖

解決方案:

1)首先創建從資源的位圖與附加選項ARGB_8888

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

2)聲明位圖

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

3)內部的onDraw()函數繪製圖形

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中設置前景位圖的這些Alpha方面? – 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,則可以將第一個位圖設置爲背景,將第二個位圖設置爲圖像源。

<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將多個drawable放在彼此的頂部。 - 其他 - 只要與埃裏克的方法。 – jakk

相關問題