转载请标明出处: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相关推荐

  1. Android 自定义View —— Paint

    上一篇说了自定义view的坐标系以及view 的使用,下面说下自定义view Paint 的使用 Paint 相对于画笔 ,可以使用Paint 来决定画的内容的颜色,边距粗细,设置样式,字体大小 ,等 ...

  2. Android 自定义View —— Canvas

    上一篇在android 自定义view Paint 里面 说了几种常见的Point 属性 绘制图形的时候下面总有一个canvas ,Canvas 是是画布 上面可以绘制点,线,正方形,圆,等等,需要和 ...

  3. Android自定义View之Paint绘制文字和线

    Android自定义View系列 Android自定义View注意事项 Android自定义View之图像的色彩处理 Android自定义View之Canvas Android自定义View之轻松实现 ...

  4. Android自定义View —— TypedArray

    在上一篇中Android 自定义View Canvas -- Bitmap写到了TypedArray 这个属性 下面也简单的说一下TypedArray的使用 TypedArray 的作用: 用于从该结 ...

  5. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定

    概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...

  6. android代码实现手机加速功能,Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...

  7. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  8. android自定义抽奖,Android自定义view制作抽奖转盘

    本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...

  9. android view 渐变动画,Android自定义view渐变圆形动画

    本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...

最新文章

  1. 多核处理器集成了神经处理单元
  2. 解决 IPS forbidden 的问题
  3. qa dataset
  4. 1069. 微博转发抽奖(20)
  5. ListT.Find用法学习
  6. [转]ubuntu server:开机自动登录
  7. 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
  8. c语言调用Windows自定义消息,VC自定义消息postmessage用法(消息响应函数)
  9. 改了个字符串 项目无法启动,springboot循环依赖问题分析
  10. 物体检测中的mAP含义
  11. matlab光学原理仿真应用衍射,基于Matlab的光学衍射实验仿真
  12. 搜狗输入法 linux 怎么打开,ubuntu 15.10安装搜狗输入法不能打开
  13. Mixpanel接入
  14. 第一次在OJ上写个a+b简直弱爆了。。。。
  15. 根据前序和中序推出后序
  16. 简单聊一聊Python工程师任职要求及未来发展方向
  17. 小程序前端view内容重叠问题
  18. SCAU高级语言程序设计OJ
  19. 第10章第6节:使用iSlide对幻灯片中的多张图片进行环形布局 [PowerPoint精美幻灯片实战教程]
  20. 查看当前Ubuntu系统的版本

热门文章

  1. html焦点图自动播放纯代码,jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)...
  2. 一、史上最强hadoop分布式集群的搭建
  3. docker搭建redis
  4. matlab中ismember_MATLAB 代码格式化简易版
  5. 轻舟智航发布Driven-by-QCraft第三代自动驾驶硬件方案
  6. AAAI 2021 | 学习截断信息检索排序列表
  7. 跟技术大咖涨姿势!前沿CV技术+落地应用练就CV界的最强王者
  8. 【腾讯面试题】Nginx
  9. wandb: 深度学习轻量级可视化工具入门教程
  10. 机器学习理论《统计学习方法》学习笔记:第十一章 条件随机场(CRF)