Android 如何清空 Canvas ?
似乎一直未找到好的解決辦法,有的方法限制使用純色背景,但無論怎么嘗試,都未見效果,
經過嘗試,結果如下:
之前的不理想圖片 想要的效果
(注,圖示方向為最頂層)
此類如下:
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);}@Overridepublic void run() {while(bSurfaceRun){draw();try{Thread.sleep(100);} catch(InterruptedException e){ e.printStackTrace(); }}}///@Overridepublic void surfaceCreated(SurfaceHolder holder) {th.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {bSurfaceRun = false;} }