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

本文介绍如何在SurfaceView中添加触屏事件,并通过触屏坐标动态绘制图片。文章详细展示了在自定义的MySurfaceView类中实现触屏事件监听及在DrawingThread类中通过Handler和Message机制发送坐标绘制图片的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

此篇文章实际上是在上篇文章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.youkuaiyun.com/download/yudbl/10968261

 

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

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

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

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

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

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值