2012-06-09 33 views
6

Tôi đã có hai bitmap, nềnforeground. Làm thế nào để vẽ bitmap foreground trên nền mà không cần sử dụng Canvas khác?Vẽ bitmap từ các tài nguyên khác

Giải pháp:

1) Trước tiên tạo bitmap từ các nguồn lực với tùy chọn bổ sung ARGB_8888

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

2) Khai báo bitmap

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

3) Bên trong OnDraw() đồ họa chức năng vẽ

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); 
} 
.210

Và như Soxxeh nói, đây là nguồn rất tốt của thông tin: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html

+1

Vì vậy, giải pháp này có hiệu quả hay bạn đang đặt câu hỏi? –

Trả lời

5

Hãy thử điều này:

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

Hình ảnh thứ hai (hình ảnh cận cảnh) phải có khía cạnh Alpha hoặc bạn không thể nhìn xuyên qua nó .

+0

Làm thế nào để thiết lập trong Android những khía cạnh Alpha của bitmap tiền cảnh? – Kris

+1

Khi bạn tạo Bitmap, hãy cho nó tham số RGBA_8888, sau đó vẽ nó như bình thường (không đặt màu nền). Xem [Bitmap.Config] (http://developer.android.com/reference/android/graphics/Bitmap.Config.html). [Ví dụ này] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html) cũng có thể cung cấp cho bạn một số ý tưởng. – Eric

+0

Xin cảm ơn! Cuối cùng nó hoạt động! – Kris

1

Nếu bạn sử dụng ImageView, bạn có thể đặt bitmap đầu tiên làm nền và thứ hai làm nguồn hình ảnh.

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

Nếu không sử dụng ImageView thì sao? –

+0

- Trên FrameLayout bạn có thể chỉ định tiền cảnh thông qua setForeground(). - Bạn cũng có thể sử dụng LayerDrawable để đặt nhiều drawables trên đầu trang của mỗi khác. - Khác chỉ đi với cách tiếp cận của Eric. – jakk

Các vấn đề liên quan