前言:

在知道了SurfaceView的使用方法,以后实践,只最好的学习方法,所以在基本掌握了SurfaceView的用法后,我们通过一个实例的编写来更加深入的去掌握SurfaceView.由于它具有独立的子线程进行,图形绘制的同时,不会堵塞主线程,所以SurfaceView常用再游戏开发和一些需要经常刷新屏幕或者试进行数据处理的应用当中,接下来我们要编写的一个项目试绘画板,展现了如何使用SurfaceView来实现这一功能.

分析:

绘画板就是,通过记录用户接触屏幕的路径,然后绘制下来,所以可以通过使用Path对象来记录手指滑动的路径,然后进行绘制.

编写:

整个代码是基于上一篇博客的样例代码之上的,所以我就只把关键部分的代码贴出来了,有兴趣的朋友,可以自己回去试试.

在SurfaceView的onTouchEvent()中来记录Path的路径

    public  boolean onTouchEvent(MotionEvent event){int x = (int)event.getX();int y = (int)event.getY();switch (event.getAction()){case MotionEvent.ACTION_DOWN:mPath.moveTo(x,y);break;case MotionEvent.ACTION_MOVE:mPath.lineTo(x,y);break;case  MotionEvent.ACTION_UP:break;}return true;}

再draw()方法中进行绘制,代码如下

    private void draw(){try {mCanvas = mHolder.lockCanvas();//draw somethingmCanvas.drawColor(Color.WHITE);mCanvas.drawPath(mPath , mPaint);}catch (Exception e){}finally {if(mCanvas != null){mHolder.unlockCanvasAndPost(mCanvas);//确保子线程将画布提交}}}

优化:再前面的模版中,我们在子线程中不断的调用draw()方法进行绘制,但有时候绘制也不用那么频繁, 因此我们可以在子线程中,进行sleep操作,尽可能的节省系统资源,代码如下:

    public void run(){long start = System.currentTimeMillis();while(isDrawing){draw();}long end = System.currentTimeMillis();//50-100if(end - start < 100){try {Thread.sleep(100 - (end - start));}catch (InterruptedException e){e.printStackTrace();}}}

通过判断draw()方法所使用逻辑的时长来确定sleep的时长, 这是一个非常通用的解决方案,代码中的100ms是一个大致的经验值,这个值一般在50ms到100ms之间.

绘图效果如下

模拟器上面画的有带你丑请见谅~

SurfaceView使用日记(二)--实例:绘画板相关推荐

  1. Android端与PC端同步绘画板(二)-适配手机和PC屏幕大小

    前言 关于手机端与PC端如何建立通讯,请参考: Android端与PC端同步绘画板(一)-使用Socket建立连接 这篇文章我们来简单说一下关于手机端和PC端的屏幕适配问题,因为我们都知道因为Andr ...

  2. Qt学习(四)---实例涂鸦画板mspaint

    Qt学习(四)-实例涂鸦画板mspaint 一.Qt图形绘制 自己在Qt开源社区在自学yafeilinux前辈的<Qt快速入门系列教程>中的图形篇,结合所学的知识,可以做一个涂鸦板实例 二 ...

  3. 在 iOS 中使用 OpenGL ES 实现绘画板

    作者:lyman 来源: http://www.lymanli.com/2020/01/04/ios-opengles-paint/ 今天我们使用 OpenGL ES 来实现一个绘画板,主要介绍在 O ...

  4. 手把手教你实现一个canvas智绘画板

    手把手教你实现一个canvas智绘画板 下载地址 前言 本文主要介绍: 项目介绍 项目效果展示 一步步实现项目效果 踩坑 一.项目介绍 名称: 智绘画板 技术栈: HTML5,CSS3,JavaScr ...

  5. [python opencv 计算机视觉零基础到实战] 十九、简易绘画板制作

    一.学习目标 了解事件 编写一个简易绘画板 二.了解如何制作简易绘画板 2.1 了解鼠标多种事件 上一节我们简单的使用opencv的图形绘制方法,用鼠标绘制了一些内容.上一节所响应的是简单的双击事件E ...

  6. OpenGL ES之深入解析如何实现“手写绘画板”

    一.设置绘画板 ① 设置画板视图 设置绘画板位置.大小.背景 CGFloat ratio = self.view.frame.size.height / self.view.frame.size.wi ...

  7. puppet成长日记二 Package资源详细介绍及案例分析

    puppet成长日记二 Package资源详细介绍及案例分析 一.系统环境 1.puppet服务端 Release:RHEL6.4 HOSTNAME: puppetserver.rsyslog.org ...

  8. 什么是数位板? 数位板,又名绘图板、绘画板、手绘板等等,是计算机输入设备的一种,通常是由一块板子和一支压感笔组成,它和手写板等作为非常规的输入产品相类似,都针对一定的使用群体。 与手写板所不同的是

    什么是数位板? 数位板,又名绘图板.绘画板.手绘板等等,是计算机输入设备的一种,通常是由一块板子和一支压感笔组成,它和手写板等作为非常规的输入产品相类似,都针对一定的使用群体. 与手写板所不同的是,数 ...

  9. 利用Python GUI写一个简单的绘画板

    先说废话,再上代码 这个绘画板主要运用了Python自带的标准GUI库Tkinter,包含了画笔颜色选择,背景布颜色选择,橡皮擦,清屏,保存图片等功能. from tkinter import * f ...

最新文章

  1. Keras神经网络集成技术
  2. python带我起飞 豆瓣评分_你听过后觉得爽到飞起的电音是哪一首?
  3. catch的执行与try的匹配
  4. php 判断当前栏目高亮,Phpcms V9采用if语句判断当前栏目高亮、判断分类信息是否过期...
  5. 线性表------栈
  6. java 正则提取大于等于号_Java正则表达式
  7. X 分钟速成 Python
  8. BP反向传播一文弄懂神经网络中的反向传播法
  9. 论文提交数量爆炸式增长,最大规模NLP会议ACL 2019放榜
  10. java remote debug parameters
  11. springboot-注解汇总
  12. eJOI2019 简要题解
  13. 使用DNSLog进行盲打
  14. 『杭电1900』Gangs
  15. linux进程异常退出分析,ECS Linux程序异常退出提示“out of memory”的临时解决办法...
  16. 美团点评2019校招真题——种花
  17. 在python中创建一个具有特定大小的空列表
  18. 没有广泛爱好的人,就不是热爱生活…
  19. 使用Unity来实现全民K歌唱歌,耳返效果和混响功能
  20. 严蔚敏数据结构c++版微盘_招聘 | 传智 C 位,等你坐镇~

热门文章

  1. 将Planet卫星影像数据添加到QGIS, ArcGIS Pro 或 ArcGIS 10.X方法,以ArcGIS Pro为例。
  2. ndims matlab,MATLAB的size(),length(),ndims()函数
  3. 轻松完成销售业绩的6个技巧
  4. Visual C++编译错误:error C2220: 警告被视为错误 - 没有生成“object”文件
  5. bzoj1062: [NOI2008]糖果雨
  6. Android sockot连接打印机EPSON ESC/POS指令打印
  7. flutter 带未读消息的底部导航
  8. Python+appium+GUI界面pyside2微信自动加好友(改问候语、备注、标签)
  9. 双十一自动领喵币工具
  10. python怎么打开h5文件_python怎么查看h5文件-问答-阿里云开发者社区-阿里云