gpt4 book ai didi

android - 使用 PorterDuff 模式删除位图部分

转载 作者:可可西里 更新时间:2023-11-01 19:05:47 25 4
gpt4 key购买 nike

我尝试使用 Porter-Duff Xfermodes 删除我的 Android 应用程序中的部分位图。

我有一个绿色背景,上面覆盖了一张蓝色位图。当我触摸屏幕时,应该在覆盖位图中创建一个“孔”,使绿色背景可见。我当前的代码生成的不是一个洞,而是一个黑点。

下面是我的代码。任何想法,我在这里做错了什么?

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new DrawView(this));
}

public class DrawView extends View implements OnTouchListener {

private int x = 0;
private int y = 0;

Bitmap bitmap;
Canvas bitmapCanvas;

private final Paint paint = new Paint();
private final Paint eraserPaint = new Paint();

public DrawView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);

this.setOnTouchListener(this);

// Set background
this.setBackgroundColor(Color.GREEN);

// Set bitmap
bitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.RGB_565);
bitmapCanvas = new Canvas();
bitmapCanvas.setBitmap(bitmap);
bitmapCanvas.drawColor(Color.BLUE);

// Set eraser paint properties
eraserPaint.setAlpha(0);
eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
eraserPaint.setAntiAlias(true);
}

@Override
public void onDraw(Canvas canvas) {
bitmapCanvas.drawColor(Color.BLUE);
bitmapCanvas.drawCircle(x, y, 10, eraserPaint);

canvas.drawBitmap(bitmap, 0, 0, paint);
}

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

invalidate();
return true;
}

}

最佳答案

这是工作代码...可能对某人有帮助

public class ImageDemo extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(new Panel(this));
}

class Panel extends View {

private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mPaint;

Bitmap bitmap;
Canvas pcanvas;

int x = 0;
int y =0;
int r =0;

public Panel(Context context) {
super(context);

Log.v("Panel", ">>>>>>");

setFocusable(true);
setBackgroundColor(Color.GREEN);

// setting paint
mPaint = new Paint();
mPaint.setAlpha(0);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mPaint.setAntiAlias(true);

// getting image from resources
Resources r = this.getContext().getResources();

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.mickey);

// converting image bitmap into mutable bitmap
bitmap = bm.createBitmap(295, 260, Config.ARGB_8888);
pcanvas = new Canvas();
pcanvas.setBitmap(bitmap); // drawXY will result on that Bitmap
pcanvas.drawBitmap(bm, 0, 0, null);
}

@Override
protected void onDraw(Canvas canvas) {
// draw a circle that is erasing bitmap
pcanvas.drawCircle(x, y, r, mPaint);

canvas.drawBitmap(bitmap, 0, 0,null);

super.onDraw(canvas);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// set parameter to draw circle on touch event
x = (int) event.getX();
y = (int) event.getY();

r =20;
// At last invalidate canvas
invalidate();
return true;
}
}
}

关于android - 使用 PorterDuff 模式删除位图部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com