删除区域在android中显示为黑色

删除区域在android中显示为黑色,android,Android,我正在android上开发一个应用程序,其中使用了移动手指擦除功能。 在我的应用程序中,擦除功能正常工作,但当我们切换到下一个活动时,擦除区域显示为黑色。请提前给出任何建议或链接以解决此问题。。 我的代码是 class EraseView extends View{ Bitmap bgr,bgr1; Bitmap overlayDefault; Bitmap overlay; Paint pTouch; int X = -100; int Y = -100; Canvas c2; GlobalV

我正在android上开发一个应用程序,其中使用了移动手指擦除功能。 在我的应用程序中,擦除功能正常工作,但当我们切换到下一个活动时,擦除区域显示为黑色。请提前给出任何建议或链接以解决此问题。。 我的代码是

class EraseView extends View{
Bitmap bgr,bgr1;
Bitmap overlayDefault;
Bitmap overlay;
Paint pTouch;
int X = -100;
int Y = -100;
Canvas c2;
GlobalVariable globalVariable;
@SuppressLint("NewApi")
public EraseView(Context context,Bitmap bitmap) {
    super(context);
    globalVariable=(GlobalVariable)context.getApplicationContext();
    bgr = BitmapFactory.decodeResource(getResources(),R.drawable.erase_bg);
    bgr1 = BitmapFactory.decodeResource(getResources(),R.drawable.erase_bg);
    overlayDefault =bitmap;
    overlayDefault = Bitmap.createScaledBitmap(overlayDefault,globalVariable.bitmap_width, globalVariable.bitmap_height, true);
    overlay = bitmap.copy(Config.ARGB_8888, true); 
    overlay = Bitmap.createScaledBitmap(overlay, globalVariable.bitmap_width, globalVariable.bitmap_height, true);
    c2 = new Canvas(overlay);
    pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);         
    pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
    pTouch.setColor(Color.TRANSPARENT);
    pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
    globalVariable.bitmapArray=new ArrayList<Bitmap>(); 
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            X = (int) ev.getX();
            Y = (int) ev.getY();
            invalidate();
            break;
        }
        case MotionEvent.ACTION_MOVE: {
                X = (int) ev.getX();
                Y = (int) ev.getY();
                invalidate();
                break;
        }           
        case MotionEvent.ACTION_UP:
            globalVariable.count++;
            globalVariable.bitmapArray.add(globalVariable.bitmap);
            break;
    }
    return true;
}
@Override
public void onDraw(Canvas canvas){
    super.onDraw(canvas);
    /*//draw background
    canvas.drawColor(Color.TRANSPARENT);
    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); //exclude this line to show all as you draw
    c2.drawCircle(X, Y, 80, pTouch);
    //draw the overlay over the background  
    canvas.drawBitmap(overlay, 0, 0, null);*/
    canvas.drawColor(Color.TRANSPARENT);
    Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/);
    new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
    canvas.drawBitmap(bgr, 0, 0, new_paint);
    c2.drawCircle(X, Y, 25, pTouch);
    canvas.drawBitmap(overlay, 0, 0, new_paint);
    Bitmap tempBitmap = Bitmap.createBitmap(globalVariable.bitmap_width,globalVariable.bitmap_height, Bitmap.Config.RGB_565);
   Canvas can=new Canvas(tempBitmap);
   can.drawBitmap(bgr, 0, 0, null);
   can.drawBitmap(overlay, 0, 0, null);
    globalVariable.bitmap=tempBitmap;
}
}
类视图扩展视图{
位图bgr,bgr1;
位图叠加故障;
位图叠加;
油漆涂刷;
int X=-100;
int Y=-100;
帆布c2;
全球可变的全球可变的;
@SuppressLint(“新API”)
公共视图(上下文上下文、位图){
超级(上下文);
globalVariable=(globalVariable)上下文。getApplicationContext();
bgr=BitmapFactory.decodeResource(getResources(),R.drawable.erase_bg);
bgr1=BitmapFactory.decodeResource(getResources(),R.drawable.erase_bg);
叠加故障=位图;
overlayDefault=Bitmap.createScaledBitmap(overlayDefault,globalVariable.Bitmap\u width,globalVariable.Bitmap\u height,true);
overlay=bitmap.copy(Config.ARGB_8888,true);
overlay=Bitmap.createScaledBitmap(overlay,globalVariable.Bitmap\u width,globalVariable.Bitmap\u height,true);
c2=新画布(覆盖);
pTouch=新油漆(油漆.防油漆别名标志);
pTouch.setXfermode(新的PorterDuffXfermode(Mode.SRC_OUT));
pTouch.setColor(颜色.透明);
pTouch.setMaskFilter(新的BlurMaskFilter(15,Blur.NORMAL));
globalVariable.bitmapArray=新的ArrayList();
}
@凌驾
公共事件(MotionEvent ev){
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:{
X=(int)ev.getX();
Y=(int)ev.getY();
使无效();
打破
}
case MotionEvent.ACTION\u移动:{
X=(int)ev.getX();
Y=(int)ev.getY();
使无效();
打破
}           
case MotionEvent.ACTION\u UP:
globalVariable.count++;
globalVariable.bitmapArray.add(globalVariable.bitmap);
打破
}
返回true;
}
@凌驾
公共空白onDraw(画布){
super.onDraw(帆布);
/*//画背景
画布。drawColor(颜色。透明);
drawBitmap(bgr,0,0,null);
//将默认覆盖复制到临时覆盖中,并在其中打孔
c2.drawBitmap(overlayDefault,0,0,null);//排除此行以在绘制时显示所有内容
c2.牵引圈(X,Y,80,P);
//在背景上绘制覆盖图
drawBitmap(覆盖,0,0,null)*/
画布。drawColor(颜色。透明);
油漆新油漆=新油漆(/*油漆.防油漆别名\u标志*/);
new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_));
画布.绘制位图(bgr,0,0,新的_绘制);
c2.牵引圈(X,Y,25,P);
画布.drawBitmap(覆盖,0,0,新的油漆);
位图tempBitmap=Bitmap.createBitmap(globalVariable.Bitmap\u宽度、globalVariable.Bitmap\u高度、Bitmap.Config.RGB\u 565);
Canvas can=新画布(tempBitmap);
can.drawBitmap(bgr,0,0,null);
can.drawBitmap(覆盖,0,0,null);
globalVariable.bitmap=tempBitmap;
}
}

在上述问题中,删除图像后,删除区域在下一个活动中显示为黑色。。 为此,请将此代码替换为以下代码

Bitmap tempBitmap = Bitmap.createBitmap(globalVariable.bitmap_width,globalVariable.bitmap_height,       Bitmap.Config.RGB_565);
在这种情况下,如果你设置了这个代码,那么你肯定会发现擦除区域是透明的

Bitmap tempBitmap = Bitmap.createBitmap(globalVariable.bitmap_width,globalVariable.bitmap_height,       Bitmap.Config.ARGB_8888);

我得到了这个答案