与第二个帆布的Andr​​oid更换一个位图 [英] replacing one bitmap with second one canvas android

查看:220
本文介绍了与第二个帆布的Andr​​oid更换一个位图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在一个应用程序有是二位,我想每当我触摸我的手指去除图像或移动我的手指和第二位图的一部分,显示将显示与安培;第一个图像的部分将被删除我用下面的code,但在两个图像替换,但我想抹掉只有第一个,第二个会显示在删除区域,..can任何机构帮助我如何处理这种

下面是code

 公共类PaintView扩展视图实现OnTouchListener {
私有静态最后弦乐TAG =PaintView;
位图Bitmap1,Bitmap2;
透明位图;
位图覆盖;
INT X = -100;
INT Y = -100;
帆布带C2;//列表<点和GT;点=新的ArrayList<点和GT;();
涂料粉刷=新的油漆();公共PaintView(上下文的背景下){
    超级(上下文);
    setFocusable(真);
    setFocusableInTouchMode(真);
    this.setOnTouchListener(本);    Bitmap1 = BitmapFactory.de codeResource(getResources(),R.drawable.bear);
    Bitmap2 = BitmapFactory
            由Matchi.com提供回到codeResource(getResources(),R.drawable.camel);
    透明= Bitmap.createBitmap(480,800,Bitmap.Config.ARGB_8888);
    C2 =新的Canvas();
    c2.setBitmap(透明);
    c2.drawBitmap(Bitmap1,0,0,NULL);
    paint.setAlpha(0);
    paint.setStyle(Style.FILL);    paint.setXfermode(新PorterDuffXfermode(Mode.SRC_OUT));
    paint.setAntiAlias​​(真);}@覆盖
公共无效的onDraw(帆布油画){
    c2.drawBitmap(Bitmap2,0,0,NULL);
    c2.drawCircle(X,Y,50,油漆);
    canvas.drawBitmap(透明,0,0,NULL);}公共布尔onTouch(查看视图,MotionEvent事件){
    X =(int)的event.getX();
    Y =(INT)event.getY();    无效();
    返回true;
}
 }类Point {
浮动的x,y;@覆盖
公共字符串的toString(){
    返回X +,+ Y;
}
}


解决方案

最后我有

解决了这个问题

 公共类PaintView扩展视图实现OnTouchListener {
私有静态最后弦乐TAG =PaintView;
位图Bitmap1,Bitmap2;
透明位图;
位图覆盖;
INT X = -100;
INT Y = -100;
帆布带C2;
私人布尔isTouched = FALSE;//列表<点和GT;点=新的ArrayList<点和GT;();
涂料粉刷=新的油漆();公共PaintView(Activity上下文){
    超级(上下文);
    setFocusable(真);
    setFocusableInTouchMode(真);
    this.setOnTouchListener(本);
    DisplayMetrics指标= context.getResources()getDisplayMetrics()。
    INT宽度= metrics.widthPixels;
    INT高度= metrics.heightPixels;    透明= Bitmap.createBitmap(宽度,高度,Bitmap.Config.ARGB_8888);
    Bitmap1 = BitmapFactory.de codeResource(getResources(),R.drawable.bear);
    Bitmap2 = BitmapFactory
            由Matchi.com提供回到codeResource(getResources(),R.drawable.date);    C2 =新的Canvas();
    c2.setBitmap(透明);
      // c2.drawBitmap(Bitmap1,0,0,NULL);
    c2.drawBitmap(Bitmap2,0,0,油漆);    paint.setAlpha(0);
    paint.setStyle(Style.FILL);
    paint.setXfermode(新PorterDuffXfermode(Mode.SRC_OUT));
    paint.setAntiAlias​​(真);
} 私人静点getDisplaySize(最终显示器显示){
  最后一点点=新点();
   point.x = display.getWidth();
   point.y = display.getHeight();
  返回点;
 }@覆盖
公共无效的onDraw(帆布油画){
    的System.out.println(的onDraw);
    c2.drawCircle(X,Y,50,油漆);
    如果(isTouched)
    {
        canvas.drawBitmap(Bitmap1,0,0,NULL);
    }
    canvas.drawBitmap(透明,0,0,NULL);}公共布尔onTouch(查看视图,MotionEvent事件){
    isTouched = TRUE;
    X =(int)的event.getX();
    Y =(INT)event.getY();    无效();
    返回true;
}
 }  类Point {
浮动的x,y;@覆盖
公共字符串的toString(){
    返回X +,+ Y;
}
 }

i want to make an application in that there is two bitmap, i want to remove image whenever i touch my finger or move my finger and second bitmap's part be shown will be shown & first image's part will be erased i have used following code but in that both images are replacing but i want to erase only first one, second will shown on erased area, ..can any body help me how to handle this

below is the code

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;
}
}

解决方案

Finally i have solved that problem by

    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;
}
 }

这篇关于与第二个帆布的Andr​​oid更换一个位图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆