android moveTo、lineTo、quadTo、cubicTo、arcTo详解(转)

转载请注明出处:王亟亟的大牛之路

原文出自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0906/3425.html
记录下moveTo、lineTo、quadTo、cubicTo、arcTo的作用,在自定义view的时候经常用到。
接下来也会分享下这几天写的几个东西。相信对于新手也会有点帮助,高手也帮忙看看有没错,欢迎吐槽吐槽。

moveTo
moveTo 不会进行绘制,只用于移动移动画笔。
结合以下方法进行使用。

lineTo
lineTo 用于进行直线绘制。

mPath.lineTo(300, 300);
canvas.drawPath(mPath, mPaint);

默认从坐标(0,0)开始绘制。如图:

刚才我们不说了moveTo是用来移动画笔的吗?

mPath.moveTo(100, 100);
mPath.lineTo(300, 300);
canvas.drawPath(mPath, mPaint);

把画笔移动(100,100)处开始绘制,效果如图

quadTo
quadTo 用于绘制圆滑曲线,即贝塞尔曲线。

mPath.quadTo(x1, y1, x2, y2) (x1,y1) 为控制点,(x2,y2)为结束点。

同样地,我们还是得需要moveTo来协助控制。

mPath.moveTo(100, 500);
mPath.quadTo(300, 100, 600, 500);
canvas.drawPath(mPath, mPaint);

效果如图:

cubicTo
cubicTo 同样是用来实现贝塞尔曲线的。

mPath.cubicTo(x1, y1, x2, y2, x3, y3) (x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。

那么,cubicTo 和 quadTo 有什么不一样呢?

官方是这么说的:

Same as cubicTo, but the coordinates are considered relative to the current point on this contour.

说白了,就是多了一个控制点而已。

然后,我们想绘制和上一个一样的曲线,应该怎么写呢?

mPath.moveTo(100, 500);
mPath.cubicTo(100, 500, 300, 100, 600, 500);

看看效果:

一模一样!

如果我们不加 moveTo 呢?

则以(0,0)为起点,(100,500)和(300,100)为控制点绘制贝塞尔曲线:

arcTo
arcTo 用于绘制弧线(实际是截取圆或椭圆的一部分)。

mPath.arcTo(ovalRectF, startAngle, sweepAngle) , ovalRectF为椭圆的矩形,startAngle 为开始角度,sweepAngle 为结束角度。

mRectF = new RectF(10, 10, 600, 600);
mPath.arcTo(mRectF, 0, 90);
canvas.drawPath(mPath, mPaint);

由于new RectF(10, 10, 600, 600)为正方形,又截取 0 ~ 90 度 ,则所得曲线为四分之一圆的弧线。

效果如图:

Thanks for watch

时间: 2024-08-28 12:49:17

android moveTo、lineTo、quadTo、cubicTo、arcTo详解(转)的相关文章

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

  [Android布局学习系列]   1.Android 布局学习之--Layout(布局)详解一   2.Android 布局学习之--Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之--LinearLayout的layout_weight属性   4.Android 布局学习之--LinearLayout属性baselineAligned的作用及baseline      Layout Parameters(布局参数):            在XML文

Android开发入门(一)详解活动 1.2 设置Activity的样式和主题

默认情况下,一个activity占据整个屏幕.然而,可以为一个activity设置一个"对话框"主题,这样, 它就能像一个浮动的对话框显示出来了.举个例子,你可能想要把你的activity定义成一个弹出的"对话框 ",通知用户进行一些操作.在这种情况下,显示一个"对话框"样式的anctivity是一个引起用户注意的好 方法.想要给activity设置主题,很简单,只需在AndroidManifest.xml文件中为<application&

android app进行代码混淆实例详解

  android app进行代码混淆实例详解         接到一个新的任务,对现有项目进行代码混淆.之前对混淆有过一些了解,但是不够详细和完整,知道有些东西混淆起来还是比较棘手的.不过幸好目前的项目不是太复杂(针对混淆这块来说),提前完成--现总结之. 第一部分 介绍下操作流程(eclipse): 1.打开混淆器:找到项目根目录下的project.properties文件,将"#proguard.config=${sdk.dir}/tools/proguard/proguard-andro

android之SeekBar控件用法详解_Android

MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import a

android之RatingBar控件用法详解_Android

MainActivity.java package com.example.mars_2500_ratingbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import

Android Bluetooth蓝牙技术使用流程详解_Android

在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情. 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了.例如: BluetoothAdapter mBluetoothAdapter = Blueto

《Android 网络开发与应用实战详解》——2.3节Android系统架构

2.3 Android系统架构 Android 网络开发与应用实战详解 在本节内容中,将进一步分解Android应用程序,详细剖析Android应用程序的核心构成部分,为读者学习本书后面知识打下基础. 2.3.1 Android体系结构介绍 Android作为一个移动设备的平台,其软件层次结构包括操作系统(OS).中间件(MiddleWare)和应用程序(Application).根据Android的软件框图,其软件层次结构自下而上分为以下4层. (1)操作系统层(OS). (2)各种库(Lib

《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

2.1 简析Android安装文件 Android 网络开发与应用实战详解 当我们下载并安装Android后,会在其安装目录中看到一些安装文件.这些文件具体是干什么用的,了解这些对学习后面的开发知识十分有用.所以在本节的内容中将简要介绍这些安装文件的基本知识. 2.1.1 Android SDK目录结构 安装Android SDK后,其安装目录的具体结构如图2-1所示. temp:里面包含了一些常用的文件模板. tools:包含了一些通用的工具文件. usb_driver:包含了AMD64和X8

《Android 网络开发与应用实战详解》——1.4节Android模拟器

1.4 Android模拟器 Android 网络开发与应用实战详解 我们都知道程序开发需要调试,只有经过调试之后才能知道程序是否正确运行.作为一款手机系统,怎么样在能在计算机平台上调试Android程序呢?不用担心,谷歌提供了模拟器来解决此问题.所谓模拟器,就是指在计算机上模拟安卓系统,可以用这个模拟器来调试并运行开发的Android程序.开发人员不需要一个真实的Android手机,使用计算机就可以模拟运行一个手机,即可开发出应用在手机上面的程序.模拟器在计算机上模拟运行的效果如前面的图1-5

《Android 网络开发与应用实战详解》——2.2节解析Android SDK实例

2.2 解析Android SDK实例 Android 网络开发与应用实战详解 在Android安装后的目录中有一个名为"samples"的子目录,在里面保存了SDK中的几个演示实例.这些实例从不同的方面展示了SDK的特性.例如"android-3"目录中的实例文件结构如图2-8所示. 在本节的内容中,将引领读者浏览图2-8中各个实例的效果. 1.HelloActivity 这和编程语言中的Hello Word程序类似,是一个Android平台上的最简单程序,运行后