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