Android 用第二个位图替换一个位图

Android 用第二个位图替换一个位图,android,android-canvas,Android,Android Canvas,我想制作一个应用程序,其中有两个位图,我想在我触摸手指或移动手指时删除图像,然后显示第二个位图的部分&第一个图像的部分将被删除。我使用了以下代码,但在该代码中,两个图像都在替换,但我只想删除第一个,第二个将显示在被擦除的区域,…有人能帮我处理这个吗 下面是代码 public class PaintView extends View implements OnTouchListener { private static final String TAG = "PaintView"; Bitmap

我想制作一个应用程序,其中有两个位图,我想在我触摸手指或移动手指时删除图像,然后显示第二个位图的部分&第一个图像的部分将被删除。我使用了以下代码,但在该代码中,两个图像都在替换,但我只想删除第一个,第二个将显示在被擦除的区域,…有人能帮我处理这个吗

下面是代码

public class PaintView extends View implements OnTouchListener {
private static final String TAG = "PaintView";
Bitmap Bitmap1, Bitmap2;
Bitmap Transparent;
Bitmap overlay;
int X = -100;
int Y = -100;
Canvas c2;

// List<Point> points = new ArrayList<Point>();
Paint paint = new Paint();

public PaintView(Context context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);
    this.setOnTouchListener(this);

    Bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.bear);
    Bitmap2 = BitmapFactory
            .decodeResource(getResources(), R.drawable.camel);
    Transparent = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
    c2 = new Canvas();
    c2.setBitmap(Transparent);
    c2.drawBitmap(Bitmap1, 0, 0, null);


    paint.setAlpha(0);
    paint.setStyle(Style.FILL);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
    paint.setAntiAlias(true);

}

@Override
public void onDraw(Canvas canvas) {
    c2.drawBitmap(Bitmap2, 0, 0, null);
    c2.drawCircle(X, Y, 50, paint);
    canvas.drawBitmap(Transparent, 0, 0, null);

}

public boolean onTouch(View view, MotionEvent event) {
    X = (int) event.getX();
    Y = (int) event.getY();

    invalidate();
    return true;
}
 }

class Point {
float x, y;

@Override
public String toString() {
    return x + ", " + y;
}
}
public类PaintView扩展了视图实现OnTouchListener{
私有静态最终字符串TAG=“PaintView”;
位图Bitmap1、Bitmap2;
位图透明;
位图叠加;
int X=-100;
int Y=-100;
帆布c2;
//列表点=新的ArrayList();
油漆=新油漆();
公共PaintView(上下文){
超级(上下文);
设置聚焦(真);
setFocusableInTouchMode(真);
this.setOnTouchListener(this);
Bitmap1=BitmapFactory.decodeResource(getResources(),R.drawable.bear);
Bitmap2=BitmapFactory
.decodeResource(getResources(),R.drawable.camel);
透明=Bitmap.createBitmap(480800,Bitmap.Config.ARGB_8888);
c2=新画布();
c2.setBitmap(透明);
c2.drawBitmap(位图1,0,0,null);
油漆。setAlpha(0);
油漆.设置样式(样式.填充);
setXfermode(新的PorterDuffXfermode(Mode.SRC_OUT));
paint.setAntiAlias(真);
}
@凌驾
公共空白onDraw(画布){
c2.drawBitmap(位图2,0,0,null);
c2.画圈(X,Y,50,油漆);
drawBitmap(透明,0,0,null);
}
公共布尔onTouch(视图、运动事件){
X=(int)event.getX();
Y=(int)event.getY();
使无效();
返回true;
}
}
类点{
浮动x,y;
@凌驾
公共字符串toString(){
返回x+“,”+y;
}
}

我终于通过

    public class PaintView extends View implements OnTouchListener {
private static final String TAG = "PaintView";
Bitmap Bitmap1, Bitmap2;
Bitmap Transparent;
Bitmap overlay;
int X = -100;
int Y = -100;
Canvas c2;
private boolean isTouched = false;

// List<Point> points = new ArrayList<Point>();
Paint paint = new Paint();

public PaintView(Activity context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);
    this.setOnTouchListener(this);
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

    Transparent = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.bear);
    Bitmap2 = BitmapFactory
            .decodeResource(getResources(), R.drawable.date);

    c2 = new Canvas();
    c2.setBitmap(Transparent);
      //        c2.drawBitmap(Bitmap1, 0, 0, null);
    c2.drawBitmap(Bitmap2, 0, 0, paint);

    paint.setAlpha(0);
    paint.setStyle(Style.FILL);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
    paint.setAntiAlias(true);




}

 private static Point getDisplaySize(final Display display) {
  final Point point = new Point();
   point.x = display.getWidth();
   point.y = display.getHeight();
  return point;
 }

@Override
public void onDraw(Canvas canvas) {
    System.out.println("onDraw");
    c2.drawCircle(X, Y, 50, paint);
    if(isTouched)
    {
        canvas.drawBitmap(Bitmap1, 0, 0, null);
    }
    canvas.drawBitmap(Transparent, 0, 0, null);

}

public boolean onTouch(View view, MotionEvent event) {
    isTouched = true;
    X = (int) event.getX();
    Y = (int) event.getY();

    invalidate();
    return true;
}
 }

  class Point {
float x, y;

@Override
public String toString() {
    return x + ", " + y;
}
 }
public类PaintView扩展了视图实现OnTouchListener{
私有静态最终字符串TAG=“PaintView”;
位图Bitmap1、Bitmap2;
位图透明;
位图叠加;
int X=-100;
int Y=-100;
帆布c2;
私有布尔值isTouched=false;
//列表点=新的ArrayList();
油漆=新油漆();
公共画图视图(活动上下文){
超级(上下文);
设置聚焦(真);
setFocusableInTouchMode(真);
this.setOnTouchListener(this);
DisplayMetrics=context.getResources().getDisplayMetrics();
int width=metrics.widthPixels;
int height=metrics.heightPixels;
透明=Bitmap.createBitmap(宽度、高度、Bitmap.Config.ARGB_8888);
Bitmap1=BitmapFactory.decodeResource(getResources(),R.drawable.bear);
Bitmap2=BitmapFactory
.decodeResource(getResources(),R.drawable.date);
c2=新画布();
c2.setBitmap(透明);
//c2.drawBitmap(位图1,0,0,null);
c2.绘制位图(位图2,0,0,绘制);
油漆。setAlpha(0);
油漆.设置样式(样式.填充);
setXfermode(新的PorterDuffXfermode(Mode.SRC_OUT));
paint.setAntiAlias(真);
}
专用静态点getDisplaySize(最终显示){
最终点=新点();
point.x=display.getWidth();
point.y=display.getHeight();
返回点;
}
@凌驾
公共空白onDraw(画布){
System.out.println(“onDraw”);
c2.画圈(X,Y,50,油漆);
如果(i触摸)
{
drawBitmap(位图1,0,0,null);
}
drawBitmap(透明,0,0,null);
}
公共布尔onTouch(视图、运动事件){
isTouched=true;
X=(int)event.getX();
Y=(int)event.getY();
使无效();
返回true;
}
}
类点{
浮动x,y;
@凌驾
公共字符串toString(){
返回x+“,”+y;
}
}