从资源中绘制位图覆盖在另一个上面

8
我有两个位图,一个是背景,一个是前景。如何在不使用另一个画布的情况下将前景位图绘制到背景上?
解决方法:
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
这个解决方案有效吗,还是你在问问题? - IgorGanapolsky
2个回答

6

试试这个:

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

第二个图像(前景图像)必须具有Alpha方面,否则您将无法透过它看到下面的内容。

如何在Android中设置前景位图的Alpha属性? - Kris
1
当你创建Bitmap时,给它一个RGBA_8888参数,然后像平常一样绘制即可(不要设置背景颜色)。详见Bitmap.Config这个例子也许会给你一些启示。 - Cat
你为什么提供了 null 而不是 Paint 实例? - IgorGanapolsky
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Cat

1
如果您使用ImageView,可以将第一个位图设置为背景,第二个位图设置为图像源。
<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:src="@drawable/foreground"/>

如果不使用ImageView呢? - IgorGanapolsky
  • 在FrameLayout中,您可以通过setForeground()指定前景。
  • 您还可以使用LayerDrawable将多个可绘制对象放置在彼此上方。
  • 否则,只需采用Eric的方法。
- jakk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接