android中画弧函数canvas.drawArc()之理解
在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法、参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,作为学习过程中的一个小脚印:
一. 代码及相应的运行结果
1.填充圆弧但不含圆心(注意:代码变动部分加粗红色给出,下同)
(1)代码
1 /***********配置画笔*************/ 2 Paint paint=new Paint(); //采用默认设置创建一个画笔 3 paint.setAntiAlias(true);//使用抗锯齿功能 4 paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色 5 paint.setStyle(Paint.Style.FILL);//设置画笔类型为填充 6 /***********绘制圆弧*************/ 7 RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围 8 rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素 9 canvas.drawArc(rectf_head, -10, -160, false, paint);//绘制圆弧,不含圆心
(2) 运行结果
2.填充圆弧并且含圆心
(1)代码
1 /***********配置画笔*************/ 2 Paint paint=new Paint(); //采用默认设置创建一个画笔 3 paint.setAntiAlias(true);//使用抗锯齿功能 4 paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色 5 paint.setStyle(Paint.Style.FILL);//设置画笔类型为填充 6 /***********绘制圆弧*************/ 7 RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围 8 rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素 9 canvas.drawArc(rectf_head, -10, -160, true, paint);//绘制圆弧,含圆心
(2)运行效果
3.不填充圆弧含圆心
(1)代码
1 /***********配置画笔*************/ 2 Paint paint=new Paint(); //采用默认设置创建一个画笔 3 paint.setAntiAlias(true);//使用抗锯齿功能 4 paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色 5 paint.setStyle(Paint.Style.STROKE);//设置画笔类型为STROKE(个人感觉是描边的意思) 6 /***********绘制圆弧*************/ 7 RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围 8 rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素 9 canvas.drawArc(rectf_head, -10, -160, true, paint);//绘制圆弧,含圆心
(2)运行效果
4.不填充圆弧不含圆心
(1)代码
1 /***********配置画笔*************/ 2 Paint paint=new Paint(); //采用默认设置创建一个画笔 3 paint.setAntiAlias(true);//使用抗锯齿功能 4 paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色 5 paint.setStyle(Paint.Style.STROKE);//设置画笔类型为STROKE类型(个人感觉是描边的意思) 6 /***********绘制圆弧*************/ 7 RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围 8 rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素 9 canvas.drawArc(rectf_head, -10, -160, false, paint);//绘制圆弧,不含圆心
(2)运行效果
5. 总结
由上面的例子可以看出,是否包含圆心是有函数drawArc()第四个参数决定的(true:包含;false:不包含)。圆弧是否为填充由画笔的类型决定的
paint.setStyle()的参数决定的(Paint.Style.STROKE:描边(个人的翻译,未必准确);Paint.Style.FILL:填充;Paint.Style.FILL_AND_STROKE:既填充又描边)。 二.绘制圆弧函数详细分析--drawArc()
1.官方API:
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
- Draw the specified arc, which will be scaled to fit inside the specified oval. If the sweep angle is >= 360, then the oval is drawn completely. Note that this differs slightly from SkPath::arcTo, which treats the sweep angle mod 360.
-
- 参数:(英文)
-
oval
- The bounds of oval used to define the shape and size of the arc -
startAngle
- Starting angle (in degrees) where the arc begins -
sweepAngle
- Sweep angle (in degrees) measured clockwise -
useCenter
- If true, include the center of the oval in the arc, and close it if it is being stroked. This will draw a wedge -
paint
- The paint used to draw the arc
- 参数:(中文)
-
oval
- 用于确定圆弧形状与尺寸的椭圆边界(即椭圆外切矩形) -
startAngle
- 开始角度(以时钟3点的方向为0°,逆时针为正方向) -
sweepAngle
- 扫过角度(以时钟3点的方向为0°,逆时针为正方向) -
useCenter
- 是否包含圆心 -
paint
- 绘制圆弧的画笔 - 2.绘制圆弧的原理
-
- 由RectF(float left, float top, float right, float bottom)得到一个矩形,此虚拟矩形内切绘制一个椭圆(如果长和宽相等,则为圆)。
- 以矩形的中心为圆心,以时钟3点的方向为0°,逆时针为正方向,从0°正方向旋转startAngle 度,和椭圆相交得到一条直线和一个交点。
- 从这条直线开始,正方向旋转sweepAngle度,得到另一条直线和交点,这样就得到了一个两交点之间的 圆弧。
转载于:https://www.cnblogs.com/tjudzj/p/4387145.html
android中画弧函数canvas.drawArc()之理解相关推荐
- 介绍Android中的Paint和Canvas的概念和使用方法
下面开始正式介绍内容 一.介绍Android中的Paint和Canvas的概念和使用方法 Android中的Paint和Canvas的概念是很简单的,就是我们用画笔在画布上进行绘制没什么难度的,我们只 ...
- android demo 调用,Android中调用C++函数的一个简单Demo
这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手 .废话少说直接进入正题. 一.在Eclipse中创建一个Android Applica ...
- android中调用fft函数,J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data)...
J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data) 我一直在玩这个游戏已经有一段时间了,我无法弄清楚我在这里要做的事情. ...
- python中画logistic函数_Logistic分类函数
作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 简书地址:https://www.jianshu.com/p/abc... 这篇教程是翻译Peter R ...
- 在python中、对于函数定义代码的理解_python中如何理解装饰器代码?
长文预警,[最浅显易懂的装饰器讲解] 能不能专业地复制题目?配上代码,问题分段. 我来给提主配上问题的代码. 正式回答: 1:如何理解return一个函数,它与return一个值得用法区别在哪? 敲黑 ...
- Android中使用SurfaceView和Canvas来绘制动画
事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...
- android java函数_java – 在android中创建全局函数
像这样创建类并在此处添加您的函数: package com.mytest; import android.content.Context; import android.net.Connectivit ...
- Android -- 图片画画板(canvas、paint、bitmap)
布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:too ...
- Android中画桌子椅子的几种方法(动态添加座子椅子)(一)
第一种:自定义View继承ViewGroup实现 自定义viewgroup,通过对xml中的每个控件获取他们的宽高,然后根据三角函数关系进行位置的放置 onMeasure是测量每个子控件的宽高 onL ...
最新文章
- 华为云查询弹性云服务器规格信息,通用计算型弹性云服务器规格介绍详情-华为云...
- QML和C++混合编程--(一)
- 【302天】跃迁之路——程序员高效学习方法论探索系列(实验阶段60-2017.12.04)...
- Vitamio中文API文档(1)—— MediaStore
- 等待来自服务器的响应超时_服务器的基本框架结构
- 从BMW Vision iNEXT 看宝马如何进军自动驾驶 1
- vue-router总结2
- 学习django笔记(天天生鲜)
- 使用WePE对无法启动的系统文件进行操作
- mysql菜单表设计_多级联动菜单的数据库表如何设计?
- 注册表编辑已被管理员禁用—解决办法
- 备份与同步(二) 如何使用云存储来实现多设备的备份与同步
- 阿里巴巴算法岗编程题:菜鸟仓库
- 【机器学习】阿里云天池竞赛——工业蒸汽量预测(1)
- nc命令卡住不返回的分析
- windows找不到文件gpedit.msc怎么办?
- pyhton爬取武汉地铁信息
- 远见:如何规划职业生涯3大阶段
- JS 判断浏览器版本
- 作为全球最大的乳酸链球菌素生产区,2020年我国乳酸链球菌素产量达到1388.3吨[图]
热门文章
- 引导linux为什么要用实模式,Linux引导过程与故障排除|第1章:Linux启动流程详解...
- php radius类,PHP Radius Search
- 编译和链接的区别、makefile怎么写
- leetcode - 739. 每日温度
- TensorFlow第八步 Nesterov's accelerated gradient descent+L2 regularization
- python 中【example[I] for example in dataset】的理解
- Golang的错误处理笔记
- 计算机视觉基础-图像处理(图像分割/二值化)cpp+python
- Struts2值栈详解
- Android编译系统简要介绍和学习计划