视频:善知堂Android http://www.verycd.com/topics/2915940/

第九集:手写笔,水波纹效果。

1.实现画笔功能

主要是在drawView 方法里面, 然后利用线程画图,surfaceView来定时绘制。

    class GameView extends SurfaceView implements Callback, Runnable {        private Paint paint = null;        private Path path = null; // 画自定义图形        private SurfaceHolder sh = null;        public GameView(Context context) {            super(context);            paint = new Paint();            paint.setColor(Color.RED);            //设置为画笔            paint.setStyle(Style.STROKE);            path = new Path();            sh = this.getHolder();            // 注册一个监听,就是在View改变的时候执行是调用。            sh.addCallback(this);        }        @Override        public void surfaceDestroyed(SurfaceHolder holder) {            // 销毁的时候执行内容        }        @Override        public boolean onTouchEvent(MotionEvent event) {            switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                // 按下的瞬间                path.moveTo(event.getX(), event.getY());                break;            case MotionEvent.ACTION_MOVE:                // 按下的瞬间                path.lineTo(event.getX(), event.getY());                break;            default:                break;            }            // 不把事件传递给父窗体            return true;        }        @Override        public void surfaceCreated(SurfaceHolder holder) {            // 创建时候执行            new Thread(this).start();        }        private void drawView() {            Canvas canvas = sh.lockCanvas();            canvas.drawPath(path, paint);            sh.unlockCanvasAndPost(canvas);        }        @Override        public void surfaceChanged(SurfaceHolder holder, int format, int width,                int height) {            // 修改的时候执行        }        @Override        protected void onDraw(final Canvas canvas) {            super.onDraw(canvas);        }        @Override        public void run() {            while (true) {                drawView();                try {                    Thread.sleep(100);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }

2.去掉锯齿

加入下面代码

canvas.setDrawFilter(new PaintFlagsDrawFilter(0,                    Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));

就可以为滤画笔和位图去锯齿。

3.让响应快速

在触摸事件中加入

invalidate();

实时重绘。

4.重新设置背景,则程序中的图形就全部擦除了。

        @Override        public boolean onTouchEvent(MotionEvent event) {            switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                // 按下的瞬间                path.moveTo(event.getX(), event.getY());                break;            case MotionEvent.ACTION_MOVE:                // 移动                path.lineTo(event.getX(), event.getY());                if (list.size() < 20) {                    list.add(new Circle(event.getX(), event.getY(), 0));                }                break;            default:                break;            }            invalidate();            // 不把事件传递给父窗体            return true;        }        @Override        public void surfaceCreated(SurfaceHolder holder) {            // 创建时候执行            new Thread(this).start();        }        class Circle {            public Circle(float x, float y, int r) {                this.x = x;                this.y = y;                this.r = r;            }            float x = 0;            float y = 0;            int r = 0;        }        List<Circle> list = new ArrayList<Circle>();        private void drawView() {            Canvas canvas = sh.lockCanvas();            //刷背景,原来的图像就擦出了。            //canvas.drawColor(Color.BLACK);            canvas.drawPath(path, paint);            for (Circle c : list) {                c.r += 5;                canvas.drawCircle(c.x, c.y, c.r, paint);            }            sh.unlockCanvasAndPost(canvas);        }

下面是效果图,第一张是每次重新设置背景,后面的没有。

第九集完。

更多相关文章

  1. Android通用布局对象
  2. Android(安卓)WindowManager
  3. Android(安卓)绘制带有边框的文字
  4. android画图——颜色过滤
  5. 自定义控件-进度条
  6. Android(安卓)自定义控件,模仿小米秒表样式的时钟,完整代码注解
  7. Android之基本常见知识 getwindow() requestWindowFeature()方法
  8. android 手电筒的实现
  9. Android(安卓)软键盘顶起布局相关

随机推荐

  1. Android 混淆代码的时候出现问题
  2. Android 切换全屏,取消全屏
  3. android 拷贝文件到其他目录下
  4. Android还能走多远啊
  5. android 程序初始化界面.. .
  6. 4.Android Skill 下拉刷新
  7. AndroidApplication类学习
  8. Android中处理Json的网络获取实例
  9. Android 使用OKHttp3请求接口401,返回Auth
  10. android客显轮播图片