删除区域在android中显示为黑色
我正在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
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);
我得到了这个答案