Android自定义View Paint
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/123524086
本文出自【赵彦军的博客】
文章目录
- 画笔模式
- 画线条
- 画圆
- 画矩形
- 画弧形
- 其他
- 清空画笔样式
- 实战-绘制圆环
- 实战-圆环中绘制文字
本文示例代码详见:https://gitee.com/zhaoyanjun/text-draw
画笔模式
mPaint.setStyle(Paint.Style.FILL); //设置画笔模式为填充
- STROKE //描边
- FILL //填充
- FILL_AND_STROKE //描边加填充
实验代码
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(40); //为了实验效果明显,特地设置描边宽度非常大// 描边
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(200,200,100,paint);// 填充
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(200,500,100,paint);// 描边加填充
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(200, 800, 100, paint);
画线条
class MyView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()init {paint.color = resources.getColor(R.color.black, null) //画笔颜色paint.isAntiAlias = true //抗锯齿paint.strokeWidth = 30f //画笔宽度}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//画线条canvas.drawLine(startX, startY, startX + 200, startY + 200, paint)}
}
效果图
setStrokeCap(Paint.Cap cap)
设置线冒样式,取值有
- Cap.ROUND(圆形线冒)
- Cap.SQUARE(方形线冒)
- Paint.Cap.BUTT(无线冒)
注意:冒多出来的那块区域就是线帽!就相当于给原来的直线加上一个帽子一样,所以叫线帽
setStrokeJoin(Paint.Join join)
设置线段连接处样式,取值有:
- Join.MITER(结合处为锐角)、
- Join.Round(结合处为圆弧)、
- Join.BEVEL(结合处为直线)
画圆
canvas.drawCircle(startX, startY, 100f, paint)
画矩形
canvas.drawRect(startX, startY, startX + 100, startY + 100, paint)
画弧形
canvas.drawArc(rectF, 30f, 180f, true, paint)
其他
setStrokeWidth(float width) 设置画笔宽度
setAntiAlias(boolean aa) //抗锯齿
清空画笔样式
//清空画笔复位
reset()
源码如此:
实战-绘制圆环
效果图
class MyView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()private val radius = 300finit {paint.color = resources.getColor(R.color.black, null) //画笔颜色paint.isAntiAlias = true //抗锯齿}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//绘制圆环paint.color = Color.parseColor("#dddddd")paint.strokeWidth = 30fpaint.style = Paint.Style.STROKEcanvas.drawCircle(startX, startY, radius, paint)//绘制弧形paint.color = Color.REDpaint.strokeCap = Paint.Cap.ROUNDval rectF = RectF(startX - radius, startY - radius, startX + radius, startY + radius)canvas.drawArc(rectF, -90f, 225f, false, paint)}
}
实战-圆环中绘制文字
重要的是文字居中显示。
计算文字在圆环中的居中文字,有两种方式:
- 方式一:paint.getTextBounds(content, 0, content.length, bounds)
- 方式二:val fontMetrics = paint.fontMetrics
具体示例,如下所示:
class MyView(context: Context, attrs: AttributeSet?) : View(context, attrs) {private val paint = Paint()private val radius = 300finit {paint.isAntiAlias = true //抗锯齿}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val startX = width / 2fval startY = height / 2f//绘制圆环paint.color = Color.parseColor("#dddddd")paint.strokeWidth = 30fpaint.style = Paint.Style.STROKEcanvas.drawCircle(startX, startY, radius, paint)//绘制弧形paint.color = Color.REDpaint.strokeCap = Paint.Cap.ROUNDval rectF = RectF(startX - radius, startY - radius, startX + radius, startY + radius)canvas.drawArc(rectF, -90f, 225f, false, paint)//绘制文字val content = "ababcfp"paint.textSize = 80fpaint.style = Paint.Style.FILL//居中绘制paint.textAlign = Paint.Align.CENTER//加载字体paint.typeface = ResourcesCompat.getFont(context, R.font.fangzheng)//获取文字的的边界,这个边界基于文字baselineval bounds = Rect()paint.getTextBounds(content, 0, content.length, bounds)//获取边界的高度val boundHeight = bounds.bottom - bounds.topcanvas.drawText(content, startX, startY + boundHeight / 2, paint)//方式二val fontMetrics = paint.fontMetricsval boundHeight2 = fontMetrics.descent - fontMetrics.ascentcanvas.drawText(content, startX, startY + boundHeight2 / 2, paint)}
}
Android自定义View Paint相关推荐
- Android 自定义View —— Paint
上一篇说了自定义view的坐标系以及view 的使用,下面说下自定义view Paint 的使用 Paint 相对于画笔 ,可以使用Paint 来决定画的内容的颜色,边距粗细,设置样式,字体大小 ,等 ...
- Android 自定义View —— Canvas
上一篇在android 自定义view Paint 里面 说了几种常见的Point 属性 绘制图形的时候下面总有一个canvas ,Canvas 是是画布 上面可以绘制点,线,正方形,圆,等等,需要和 ...
- Android自定义View之Paint绘制文字和线
Android自定义View系列 Android自定义View注意事项 Android自定义View之图像的色彩处理 Android自定义View之Canvas Android自定义View之轻松实现 ...
- Android自定义View —— TypedArray
在上一篇中Android 自定义View Canvas -- Bitmap写到了TypedArray 这个属性 下面也简单的说一下TypedArray的使用 TypedArray 的作用: 用于从该结 ...
- android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定
概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...
- android代码实现手机加速功能,Android自定义View实现内存清理加速球效果
Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...
- Android 自定义 圆环,Android自定义view实现圆环效果实例代码
先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...
- android自定义抽奖,Android自定义view制作抽奖转盘
本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...
- android view 渐变动画,Android自定义view渐变圆形动画
本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...
最新文章
- 多核处理器集成了神经处理单元
- 解决 IPS forbidden 的问题
- qa dataset
- 1069. 微博转发抽奖(20)
- ListT.Find用法学习
- [转]ubuntu server:开机自动登录
- 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
- c语言调用Windows自定义消息,VC自定义消息postmessage用法(消息响应函数)
- 改了个字符串 项目无法启动,springboot循环依赖问题分析
- 物体检测中的mAP含义
- matlab光学原理仿真应用衍射,基于Matlab的光学衍射实验仿真
- 搜狗输入法 linux 怎么打开,ubuntu 15.10安装搜狗输入法不能打开
- Mixpanel接入
- 第一次在OJ上写个a+b简直弱爆了。。。。
- 根据前序和中序推出后序
- 简单聊一聊Python工程师任职要求及未来发展方向
- 小程序前端view内容重叠问题
- SCAU高级语言程序设计OJ
- 第10章第6节:使用iSlide对幻灯片中的多张图片进行环形布局 [PowerPoint精美幻灯片实战教程]
- 查看当前Ubuntu系统的版本
热门文章
- html焦点图自动播放纯代码,jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)...
- 一、史上最强hadoop分布式集群的搭建
- docker搭建redis
- matlab中ismember_MATLAB 代码格式化简易版
- 轻舟智航发布Driven-by-QCraft第三代自动驾驶硬件方案
- AAAI 2021 | 学习截断信息检索排序列表
- 跟技术大咖涨姿势!前沿CV技术+落地应用练就CV界的最强王者
- 【腾讯面试题】Nginx
- wandb: 深度学习轻量级可视化工具入门教程
- 机器学习理论《统计学习方法》学习笔记:第十一章 条件随机场(CRF)