如何在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
)我的背景是黑色而不是透明的?同样的问题是,背景是黑色而不是透明的