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);}@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;} }





更多相关文章

  1. Animation(1)
  2. Android开发之ViewPager实现多页面切换及动画效果(仿Android的Lau
  3. ANDROID L——Material Design详解(动画篇)
  4. Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图
  5. android animation之scale 缩放(仿微信加号弹出菜单的动画效果)
  6. Android之如果解决Android(安卓)studio项目里面的类名不能重命名
  7. Android动态模糊效果的快速实现方法
  8. Android(安卓)PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RM
  9. Android(安卓)为点击事件添加震动效果

随机推荐

  1. Android5.1系统通过包名给应用开放系统权
  2. ProgressBar的父控件为白色背景时progres
  3. Android(安卓)API中文(1) -- Android是什么
  4. Android(安卓)Studio使用Apache POI在And
  5. FileProvider无法获取外置SD卡问题解决方
  6. 一起Talk Android吧(第一百四十六回:Androi
  7. android 悬浮控件-仿360手机助手应用详情
  8. Android中从本地未安装的APK动态加载类和
  9. Android中,Broadcas介绍
  10. String.format()在android中的应用