【问题标题】:Draw bitmaps from resources over another从另一个资源中绘制位图
【发布时间】:2012-06-13 09:33:02
【问题描述】:

我有两个位图,backgroundforeground。如何在不使用另一个 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

【问题讨论】:

  • 那么这个解决方案是否有效,还是您在问问题?

标签: android bitmap draw android-canvas


【解决方案1】:

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

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

【讨论】:

  • 如果不使用 ImageView 会怎样?
  • - 在 FrameLayout 上,您可以通过 setForeground() 指定前景。 - 您还可以使用 LayerDrawable 将多个可绘制对象放在一起。 - 否则就按照 Eric 的方法。
【解决方案2】:

试试这个:

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

第二张图像(前景图像)必须具有 Alpha 方面,否则您无法看穿它。

【讨论】:

  • 如何在Android中设置前景位图的Alpha方面?
  • 创建位图时,给它一个 RGBA_8888 参数,然后正常绘制(不要设置背景颜色)。见Bitmap.ConfigThis example 也可能给你一些想法。
  • 你为什么提供null而不是Paint实例?
  • @IgorGanapolsky 绘制位图时不需要指定绘制。这是一个可选参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多