Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中清除已绘制画布的内容?_Android_Android Canvas - Fatal编程技术网

如何在Android中清除已绘制画布的内容?

如何在Android中清除已绘制画布的内容?,android,android-canvas,Android,Android Canvas,我想在屏幕上画完某些东西后清除画布上的内容 如何完全清除屏幕?上面的任何代码片段都会很有帮助 谢谢 这是我的代码: public class Panel extends SurfaceView implements SurfaceHolder.Callback { private ViewThread mThread; private ArrayList<Element> mElements = new ArrayList<Element>(); public Pa

我想在屏幕上画完某些东西后清除画布上的内容

如何完全清除屏幕?上面的任何代码片段都会很有帮助

谢谢

这是我的代码:

public class Panel extends SurfaceView implements SurfaceHolder.Callback {

private ViewThread mThread;
private ArrayList<Element> mElements = new ArrayList<Element>();


public Panel(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setBackgroundColor(Color.TRANSPARENT);                 
    this.setZOrderOnTop(true); //necessary                
    getHolder().setFormat(PixelFormat.TRANSPARENT); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 

} 


public void doDraw(Canvas canvas) {
     super.onDraw(canvas);

     //canvas.drawColor(Color.TRANSPARENT);
    // canvas.drawColor(Color.argb(0, 255, 255, 255)); 
    //canvas.drawColor(Color.rgb(-1, -1, -1));
    //canvas.drawARGB(0, 255, 255, 255);
    synchronized (mElements) {
        for (Element element : mElements) {
            element.doDraw(canvas);
        }
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    if (!mThread.isAlive()) {
        mThread = new ViewThread(this);
        mThread.setRunning(true);
        mThread.start();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    if (mThread.isAlive()) {
        mThread.setRunning(false);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (mElements) {
        mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY()));
    }
    return super.onTouchEvent(event);
}
public类面板扩展SurfaceView实现SurfaceHolder.Callback{
私有视图线程mThread;
private ArrayList melents=new ArrayList();
公共面板(上下文上下文,属性集属性){
超级(上下文,attrs);
此.setBackgroundColor(Color.TRANSPARENT);
this.setZOrderOnTop(true);//必要
getHolder().setFormat(PixelFormat.TRANSPARENT);
getHolder().addCallback(此);
mThread=新视图线程(此);
} 
公共虚空doDraw(画布){
super.onDraw(帆布);
//画布。drawColor(颜色。透明);
//drawColor(Color.argb(0,255,255,255));
//drawColor(Color.rgb(-1,-1,-1));
//drawARGB(0,255,255,255);
同步(混合){
用于(元素:MELENTS){
元素。doDraw(画布);
}
}
}
@凌驾
公共空白表面更改(表面文件夹持有者、整型格式、整型宽度、整型高度){
//TODO自动生成的方法存根
}
@凌驾
已创建的公共空白表面(表面持有人){
如果(!mThread.isAlive()){
mThread=新视图线程(此);
mThread.setRunning(true);
mThread.start();
}
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
if(mThread.isAlive()){
mThread.setRunning(false);
}
}
@凌驾
公共布尔onTouchEvent(运动事件){
同步(混合){
添加(新元素(getResources(),(int)event.getX(),(int)event.getY());
}
返回super.onTouchEvent(事件);
}
}试试这个:

canvas.drawColor(0); //use 32bit hex like 0xffffffff for white

这将用黑色清除画布。您可以使用任何喜欢的颜色。

此代码

canvas.drawARGB(0, 0, 0, 0);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 

Rect rect=new Rect(0,0,canvas_width,canvas_height);
canvas.drawRect(rect,paint);
将使画布背景变黑

但是,如果要完全清除图形并使画布背景透明,请遵循以下代码

Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 

Rect rect=new Rect(0,0,canvas_width,canvas_height);
canvas.drawRect(rect,paint);

我已经添加了上面的代码,如何从其他活动中清理画布。恐怕我不太明白你的评论。需要详细说明吗?我得到了上面的代码片段,我将画布置于xml图像上方。对于重新绘制,我希望清除已绘制的区域。如何从其他活动中执行此操作,因为这是SurfaceView为什么使用此代码(或
Canvas.drawColor(0,PorterDuff.Mode.clear
)我的背景是黑色而不是透明的?同样的问题是,背景是黑色而不是透明的