我的代码如下。 它与此问题的解决方案中找到的代码完全相同:Make certain area of bitmap transparent on touch
和许多其他人一样,我遇到了这个问题:圆形变成黑色。
我正在使用PNG文件作为我的覆盖层,并且该文件没有任何透明区域。但是,一旦我在Photoshop中添加任意透明区域到PNG中,代码就开始工作,并显示圆形透明度。
显然,图像及其透明度设置存在问题,但我不知道是什么问题。 我需要使用没有任何透明区域的PNG作为我的覆盖层。
有什么建议吗?
编辑:良好的代码不应取决于覆盖图像是否具有透明度,我正在寻找一种处理任何类型的图像作为我的覆盖层的方法,无论是JPG,PNG还是其他格式。
编辑2:如果我在复制位图时使用Config.ARGB_4444,则会创建alpha通道,但是此格式会降低图像质量。 对于API级别11及以上的API,有Bitmap.setHasAlpha()。 但是,我目前使用的是10级别。
我正在使用PNG文件作为我的覆盖层,并且该文件没有任何透明区域。但是,一旦我在Photoshop中添加任意透明区域到PNG中,代码就开始工作,并显示圆形透明度。
显然,图像及其透明度设置存在问题,但我不知道是什么问题。 我需要使用没有任何透明区域的PNG作为我的覆盖层。
有什么建议吗?
编辑:良好的代码不应取决于覆盖图像是否具有透明度,我正在寻找一种处理任何类型的图像作为我的覆盖层的方法,无论是JPG,PNG还是其他格式。
编辑2:如果我在复制位图时使用Config.ARGB_4444,则会创建alpha通道,但是此格式会降低图像质量。 对于API级别11及以上的API,有Bitmap.setHasAlpha()。 但是,我目前使用的是10级别。
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new TouchView(this));
}
class TouchView extends View {
Bitmap bgr;
Bitmap overlayDefault;
Bitmap overlay;
Paint pTouch;
int X = 100;
int Y = 100;
Canvas c2;
public TouchView(Context context) {
super(context);
bgr = BitmapFactory.decodeResource(
getResources(),
R.drawable.background);
overlay = BitmapFactory.decodeResource(
getResources(),
R.drawable.foreground)
.copy(Config.ARGB_8888, true);
c2 = new Canvas(overlay);
pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);
pTouch.setXfermode(
new PorterDuffXfermode(Mode.SRC_OUT));
pTouch.setColor(Color.TRANSPARENT);
}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
//draw background
canvas.drawBitmap(bgr, 0, 0, null);
//copy the default overlay
// into temporary overlay and punch a hole in it
//c2.drawBitmap(overlayDefault, 0, 0, null);
c2.drawCircle(X, Y, 80, pTouch);
//draw the overlay over the background
canvas.drawBitmap(overlay, 0, 0, null);
}
}
}