SurfaceView高性能绘制(三)代码实践篇-根据触屏绘制图片

一、前言

此篇文章实际上是在上篇文章SurfaceView高性能绘制(二)代码实践篇-图片绘制上,进行了一些添加更改,为了方便说明查阅单独写成一篇博文

二、修改说明

1、在自定义的MySurfaceView类里面,添加触屏事件

    //7、添加触摸事件,创建DrawingItem对象
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //监听down事件
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            Log.v("SurfaceView@@@","点击屏幕后:"+drawingThread);
            //添加图片对象
            drawingThread.addItem(event.getX(),event.getY());

        }
        return super.onTouchEvent(event);
    }

2、在绘制线程DrawingThread类里面的修改

(1)添加方法addItem,发送消息绘制

   public void addItem(float x ,float y){
        //obtain(Handler h, int what, int arg1, int arg2)
        Message message = Message.obtain(revelver, MSG_ADD, (int)x, (int)y);
        this.revelver.sendMessage(message);
    }

(2)handleMessage收到消息绘制,修改如下

                lockCanvas.drawColor(Color.BLACK);//清空画布。这里设置画布为黑色
                
//                lockCanvas.drawBitmap(iconBitmap, 0, 0, paint);
                lockCanvas.drawBitmap(iconBitmap, msg.arg1, msg.arg2, paint);

                this.drawingHolder.unlockCanvasAndPost(lockCanvas);//解锁画布

意思把所绘制图片的坐标给传递过来了,通过Handler + Message 发送出去,然后回调得到坐标,进行图片绘制。

三、效果图、源码

(1)效果图

根据触屏绘制图片我们就这样实现了。那么如果我们要把每次绘制的图片都保持住在界面上呢,该怎么实现?

下一篇文章将讲到:SurfaceView高性能绘制(四)代码实践篇-绘制多张图片

(2)源码

https://download.csdn.net/download/yudbl/10968261

 

不得不吐槽一下,csdn有时候有点坑啊

1、几个月前写的博文图片,今天来看不见了。

为了安全:重要的博文备份吧,在多个热门平台写写吧,如:简书、知乎

2、现在不知道怎么搞得?csdn上传资源默认需要5分,选不了分数了

3、我用mac默认浏览器safari突然这几天登录不了,换成google才可以

4、很多时候要写博文,出现编辑器打开了,但是写不了文字

 

 

 

 

 


版权声明:本文为YuDBL原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。