自定义View之Canvas使用
自定义View的绘制流程一般都是这样:提前创建好Paint对象,重写onDraw(),把绘制代码卸载ondraw()里面,大致如下:
Paint paint = new Paint();
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制一个圆
canvas.drawCircle(300, 300, 200, paint);
}
复制代码
这里主要是学会Paint的几个基础Api和Canvas能绘制的一些图形:
Canvas
类下的所有draw-
打头的方法,例如drawCircle()
drawBitmap()
。Paint
的几个常用Api:
Paint.setStyle(Style style)
设置绘制模式
Paint.setColor(int color)
设置颜色
Paint.setStrokeWidth(float width)
设置线条宽度
Paint.setTextSize(float textSize)
设置文字大小
Paint.setAntiAlias(boolean aa)
设置抗锯齿开关
下面主要看Canvas绘制的Api。
1 Canvas.drawColor(@ColorInt int color)
在整个绘制区域统一涂上指定的颜色。例如 drawColor(Color.BLACK)
会把整个区域染成纯黑色,覆盖掉原有内容; drawColor(Color.parse("#88880000")
会在原有的绘制效果上加一层半透明的红色遮罩。
这类颜色填充方法一般用于在绘制之前设置底色,或者在绘制之后为界面设置半透明蒙版。
2 drawCircle(float centerX, float centerY, float radius, Paint paint)
画圆。前两个参数 centerX
centerY
是圆心的坐标,第三个参数 radius
是圆的半径,单位都是像素,它们共同构成了这个圆的基本信息(即用这几个信息可以构建出一个确定的圆);第四个参数 paint
我在视频里面已经说过了,它提供基本信息之外的所有风格信息,例如颜色、线条粗细、阴影等。
在Android里,每个View都有各自的坐标系,互不影响,坐标系的原点为View左上角的那个点。水平方向为X轴,向右为正,竖直方向为轴,向下为负。
3 drawRect(float left, float top, float right, float bottom, Paint paint)
画矩形。
4 drawPoint(float x, float y, Paint paint)
画点。x
和 y
是点的坐标。点的大小可以通过 paint.setStrokeWidth(width)
来设置;点的形状可以通过 paint.setStrokeCap(cap)
来设置:ROUND
画出来是圆形的点,SQUARE
或 BUTT
画出来是方形的点。
注:Paint.setStrokeCap(cap)
可以设置点的形状,但这个方法并不是专门用来设置点的形状的,而是一个设置线条端点形状的方法。端点有圆头 (ROUND
)、平头 (BUTT
) 和方头 (SQUARE
) 三种
5 drawPoints(float[] pts, int offset, int count, Paint paint) / drawPoints(float[] pts, Paint paint)
画点(批量)。同样是画点,它和 drawPoint()
的区别是可以画多个点。pts
这个数组是点的坐标,每两个成一对;offset
表示跳过数组的前几个数再开始记坐标;count
表示一共要绘制几个点。
6 drawOval(float left, float top, float right, float bottom, Paint paint)
画椭圆。只能绘制横着的或者竖着的椭圆,不能绘制斜的,left
, top
, right
, bottom
是这个椭圆的左、上、右、下四个边界点的坐标。
7 drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
画线。startX
, startY
, stopX
, stopY
分别是线的起点和终点坐标。由于直线不是封闭图形,所以 setStyle(style)
对直线没有影响。
8 drawLines(float[] pts, int offset, int count, Paint paint) / drawLines(float[] pts, Paint paint)
画线(批量)。
9 drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
画圆角矩形。left
, top
, right
, bottom
是左上角和右下角的坐标,rx
和 ry
是圆角的横向半径和纵向半径。
10 drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
绘制弧形和扇形。drawArc()
是使用一个椭圆来描述弧形的。left
, top
, right
, bottom
描述的是这个弧形所在的椭圆;startAngle
是弧形的起始角度(x 轴的正向,即正右的方向,是 0 度的位置;顺时针为正角度,逆时针为负角度),sweepAngle
是弧形划过的角度;useCenter
表示是否连接到圆心,如果不连接到圆心,就是弧形,如果连接到圆心,就是扇形。
11 drawPath(Path path, Paint paint)
画自定义图形。
Path
可以描述直线、二次曲线、三次曲线、圆、椭圆、弧形、矩形、圆角矩形。把这些图形结合起来,就可以描述出很多复杂的图形。
Path
有两类方法,一类是直接描述路径的,另一类是辅助的设置或计算。
Path 方法第一类:直接描述路径。这一类方法还可以细分为两组:添加子图形和画线(直线或曲线)
第一组: addXxx()
——添加子图形
第二组:xxxTo()
——画线(直线或曲线)
Path 方法第二类:辅助的设置或计算
这类方法的使用场景比较少,如:setFillType(FillType fillType)
设置填充方式。
12 drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
绘制 Bitmap
对象,也就是把这个 Bitmap
中的像素内容贴过来。
13 drawText(String text, float x, float y, Paint paint)
绘制文字。
自定义View之Canvas使用的更多相关文章
- 安卓自定义View进阶-Canvas之画布操作 转载
安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...
- Flutter 34: 图解自定义 View 之 Canvas (一)
小菜最近在学习自定义 View,刚了解了一下 Paint 画笔的神奇之处,现在学习一下 Canvas 画布的神秘之处.Flutter 提供了众多的绘制方法,小菜接触不深,尽量都尝试一下. Canvas ...
- 自定义View(4)Canvas和Paint常用绘制函数
画布Canvas 在Android下进行2D绘图需要Canvas类的支持,它位于"android.graphics.Canvas"包下,直译过来为画布的意思,用于完成在View上的 ...
- Flutter 36: 图解自定义 View 之 Canvas (三)
小菜继续学习 Canvas 的相关方法: drawVertices 绘制顶点 小菜上次没有整理 drawVertices 的绘制方法,这次补上:Vertice 即顶点,通过绘制多个顶点,在进行连线,多 ...
- Flutter 35: 图解自定义 View 之 Canvas (二)
小菜前几天整理了以下 Canvas 的部分方法,今天小菜继续学习 Canvas 第二部分. drawXXX drawShadow 绘制阴影 drawShadow 用于绘制阴影,第一个参数时绘制一个图形 ...
- Android 自定义 View 圆形进度条总结
Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...
- Android自定义View学习笔记(一)
绘制基础 参考:HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础 Paint详解 参考:HenCoder Android 开发进阶: 自定义 View 1-2 Pain ...
- Android 自定义View之自绘控件
首先要提前声明一下,我对于自定义View的理解并不是很深,最近啃了几天guolin博主写的关于自定义View的博客,讲的非常棒,只不过涉及到源码和底层的一些东西,我自己就懵逼了,目前只是会了关于自定义 ...
随机推荐
- selenium.webdriver元素定位失败
错误提示: Traceback (most recent call last): File "E:/PythonData/Login/venv/logIn.py", line 18 ...
- Unity Shader and Effects Cookbook问题记录
1.p61的specular计算,涉及到的一个参数“_SpecColor”是在Unity的官方cginc文件(UnityLightingCommon.cginc)中,是直接赋颜色给这个参数,反应到你模 ...
- Linux网络安全篇,进入SELinux的世界(二)
一.简单的网页制作 1.启动httpd服务 /etc/init.d/httpd start 2.编写首页网页文件 echo "hello,this is my first webPage&q ...
- 中阶d03.4 JDBC_DAO
1.环境准备(单项目下用,在大jdbc项目下只用配置一次) jdbc的驱动(mysqlxxjdbc.jar).util工具(包装释放资源.建立连接.访问properties文件等方法) 2.dao的概 ...
- 绕过XSS过滤姿势总结
0x01 弹窗关键字检测绕过 基本WAF都针对常用的弹窗函数做了拦截,如alert().prompt().confirm(),另外还有代码执行函数eval(),想要绕过去也比较简单,我们以alert( ...
- ES5和ES6基本介绍与面向对象的基本思想
ES6和ES5基本介绍 let const 关键词定义变量 let 定义变量 特点: let 定义的变量,不会进行预解析 let 定义的变量,与 forEach() 中的变量类似 每次执行都会 ...
- First Training
B B - Local Extrema CodeForces - 888A You are given an array a. Some element of this array ai is a l ...
- deepin右键发送博客
1. 概述 deepin系统上没有像样的笔记软件.为知笔记未提供deb打包的软件,很遗憾.商店提供的软件,界面停留在上个世纪了. 这个时候如果想通过笔记来分享到博客是一件非常困难的事情. 本篇博客就是 ...
- Shellshock远程命令注入(CVE-2014-6271)漏洞复现
请勿用于非法用法,本帖仅为学习记录 shelshocke简介: shellshock即unix 系统下的bash shell的一个漏洞,Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全 ...
- [linux] 权限问题
权限问题一直蒙蒙的,下面就是总结一下!(原文链接:http://www.cnblogs.com/chengJAVA/p/4319420.html) 指令名称:chmod 使用权限 : 所有使用者 使用 ...