2012-06-09 23 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

相关问题