Android画板开发之基本画笔功能
作者:tpnet 发布时间:2023-01-09 07:26:21
标签:Android,画板,画笔
一、简介
这是画板系列的第一篇,一步步开始,从简单的画板,到功能稍微齐全一点的画板,例如基本画笔、橡皮擦、背景、文字、撤销、反撤销、保存等
这篇带大家实现一个最简单的画板,前提是需要对自定义View有一定的了解。
用的是kotlin语言
二、实现
分析如何实现: 定义了画笔和Path,然后在触摸屏幕的时候,手指一边移动一边进行path的滑动,绘制。这就完成了一个最简单的画笔功能。
下面几十行代码完成这个
class TPView(context: Context,attr:AttributeSet ) : View(context,attr) {
private var preX: Float = 0.0f //上一次的触摸点x坐标
private var preY: Float = 0.0f //上一次触摸点y坐标
var mPath = Path() //path路径
//画笔
private var mPaint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.DITHER_FLAG)
init {
//画笔为实心
mPaint.style = Paint.Style.STROKE
//颜色
mPaint.color = Color.RED
//笔触为圆形
mPaint.strokeCap = Paint.Cap.ROUND
//画笔大小
mPaint.strokeWidth = 10f
//View的背景颜色
setBackgroundColor(Color.WHITE)
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
//画线
canvas.drawPath(mPath,mPaint)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
when(event.action){
MotionEvent.ACTION_DOWN -> { //手指按下的时候
//将起始点移动到当前坐标
mPath.moveTo(event.x,event.y)
//记录上次触摸的坐标,注意ACTION_DOWN方法只会执行一次
preX = event.x
preY = event.y
}
MotionEvent.ACTION_MOVE -> { //手指移动的时候
//绘制圆滑曲线,即贝塞尔曲线,贝塞尔曲线这个知识自行了解
mPath.quadTo(preX,preY,event.x,event.y)
preX = event.x
preY = event.y
}
}
//重新绘制,会调用onDraw方法
invalidate()
return true
}
}
来源:https://blog.csdn.net/niubitianping/article/details/78400588


猜你喜欢
- 本文实例为大家分享了java实现省市区转换成树形结构的具体代码,供大家参考,具体内容如下前言:为什我想写这篇博客呢?第一方面是记录,另一方面
- 本文实例为大家分享了android实现录屏功能的具体代码,供大家参考,具体内容如下1、mian.activitypackage com.fp
- 从java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活.switc
- 前言Android作为一个通用的移动平台,其首要的功能就是通话、短信以及上网等通信功能。那么,从系统的角度来看,Android究竟是怎么实现
- 一、题目描述题目实现:运行服务器程序,等待客户端程序连接。二、解题思路首先需要在服务器中建立服务器套接字,并等待客户程序的连接。创建一个类:
- 题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例
- 因为最近重新看了泛型,又看了些反射,导致我对Object、T(以下代指泛型)、?产生了疑惑。我们先来试着理解一下Object类,学习Java
- springboot整合mybatis项目博客系统文章,相册,评论,标签,等表IDEA为最新版2021.3.3,mysql数据库为最新版Na
- 这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++ 中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函
- 前言 CLion是一款专为开发C及C++所设计
- 1. interrupt知识点 以下总结基于JDK8本文不会完整说明interrupt,只会罗列一些比较重要的点。完整了解Thre
- 今天我们介绍的是jpa删除和事务的一些坑,接下来看看具体内容。业务场景(这是一个在线考试系统)和代码:根据问题的id删除答案reposito
- 生成1. 生成error 文件的路径:你可以通过参数设置-XX:ErrorFile=/path/hs_error%p.log, 默认是在Ja
- 本文实例讲述了Android实现Service重启的方法。分享给大家供大家参考。具体如下:做APP的时候,我们可能需要一个后台服务一直在运行
- JAVA 枚举单例模式及源码分析的实例详解 单例模式的实现有很多种,网上也分析了
- Java中数组被实现为对象,它们一般都会因为记录长度而需要额外的内存。对于一个原始数据类型的数组,一般需要24字节的头信息再加上保存值所需的
- 前言传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:1、如果所有的内容都配置在.xml
- 什么是适配器模式? 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不
- 一、什么是 javabean ?在jsp页面中,包含html代码、css代码、java代码、以及业务逻辑处理代码等。javabean的作用就
- 本文实例讲述了Android开发使用Handler的PostDelayed方法实现图片轮播功能。分享给大家供大家参考,具体如下:第一步:创建