Android 如何清空 Canvas ?(找了好久的答案)

Android 如何清空 Canvas ?

似乎一直未找到好的解决办法,有的方法限制使用纯色背景,但无论怎么尝试,都未见效果,

终于在 http://stackoverflow.com/questions/4650755/clearing-canvas-with-canvas-drawcolor  上面找到了答案:



经过尝试,结果如下:

     

之前的不理想图片                     想要的效果


(注,图示方向为最顶层)


此类如下:

package com.test.move;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

import com.test.R;

public class GlobalMove extends SurfaceView implements Callback, Runnable {
	public final static String TAG = "GlobalMove";	
	public static int count = 0;
	
	private boolean bSurfaceRun = true;
	private SurfaceHolder sh;
	private Thread		   th;
    private Paint 				p;   
    private Canvas 			canvas;  
	
	//objects to be moved...
	private Bitmap bmp;
	private int lastX = 0;
	

	public GlobalMove(Context context, AttributeSet attrs) {//这种写法。。。
		super(context, attrs);
		sh = this.getHolder();
		sh.addCallback(this);
		th = new Thread(this);
		p = new Paint();
		
		initComponents(context);		
	}
	
	private void initComponents(Context context){
		bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon); 
	}

	private void draw(){
		canvas = sh.lockCanvas();
		if(canvas != null)	{	
//取消如下四行注释看效果。
//			Paint paint = new Paint();
//			paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
//			canvas.drawPaint(paint);
//			paint.setXfermode(new PorterDuffXfermode(Mode.SRC));
		
			canvas.drawBitmap(bmp, lastX+10, 50, p);
		}
		
		lastX += 10;
		if(lastX > 400)
			lastX = 0;
				
		sh.unlockCanvasAndPost(canvas);
	}
	
	@Override
	public void run() {
		while(bSurfaceRun){			
			draw();
			
			try{
				Thread.sleep(100);
			} catch(InterruptedException  e){
                e.printStackTrace();  				
			}
		}
	}


///////////////////////////////////////////////////////////////////////////////////////////////////
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		th.start();
	}
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
	}
	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		bSurfaceRun = false;
	} 

}





你可能感兴趣的:(Android开发积累)