从资源中绘制位图而不是另一个

时间:2012-06-09 19:16:17

标签: android bitmap draw android-canvas

我有两个位图,背景前景。如何在不使用其他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

2 个答案:

答案 0 :(得分:5)

试试这个:

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

第二张图片(前景图片)必须具有Alpha方面,否则您无法透视它。

答案 1 :(得分:1)

如果您使用ImageView,您可以将第一个位图设置为背景,将第二个位图设置为图像源。

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