gpt4 book ai didi

android - 使用 Canvas.drawColor() 清除 Canvas

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:33 29 4
gpt4 key购买 nike

我正在尝试更改自定义 View 的背景图片,并取得了一些成功。图像会改变,但问题是我仍然看到旧图像的痕迹。当我尝试在绘制新图像之前清除 Canvas 时,它似乎不起作用。我创建了一个位图来存储图像。更改图像时,我在绘制新图像之前调用 Canvas.drawColor() 但旧图像仍然存在。我试过 drawColor(0)、drawColor(Color.BLACK)、c.drawColor(0, PorterDuff.Mode.CLEAR),但以上均无效。因此,我不得不发布这篇文章以供比我更有经验的人审阅。

实际代码如下:

private int bgnd;
private boolean switching;

public void setBgnd(int incoming){
switching = true;
switch (incoming){

case R.drawable.image1:
bgnd = incoming;
this.invalidate();
break;

case R.drawable.image2:
bgnd = incoming;
this.invalidate();
break;

}
}



protected void onDraw(Canvas c){
if(switching == true){
Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
c.drawColor(0, PorterDuff.Mode.CLEAR);
c.drawBitmap(b, 0, 0, null);
switching = false;

}else{
Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
c.drawBitmap(b, 0, 0, null);
}
}

最佳答案

就像您一样,我也为如何清除我的多层/表面 View 应用程序中的顶层/表面 View 而苦恼。经过 2 天的搜索和编码,我找到了自己的方法,这就是我在绘制之前清除 Canvas 的方法,你可以在有多个图层/表面 View 时使用它。背景层不会被黑色覆盖,这就是诀窍。

Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
canvas.drawPaint(paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC));
// start your own drawing

关于android - 使用 Canvas.drawColor() 清除 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650755/

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