android 用Path 绘制各种图形,Path的方法解析
2016-04-11 16:07
489 查看
Path主要用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案
方法列表:
reset()
lineTo(float x, float y)
moveTo(float x, float y)
close()
path.addArc(oval, startAngle, sweepAngle)
arcTo(RectF oval, float startAngle, float sweepAngle)
quadTo(float x1, float y1, float x2, float y2)
addCircle(float x, float y, float radius, Direction dir)
addOval(RectF oval, Path.Direction dir)
addPath(Path src, float dx, float dy)
Paint初始化操作:
在处理path之前,我们首先对paint做一些初始化操作:
Paint paint = new Paint();
paint.setColor(Color.RED);
//设置画笔宽度
paint.setStrokeWidth(3);
//消除锯齿
paint.setAntiAlias(true);
//设置镂空(方便查看效果)
paint.setStyle(Style.STROKE);reset()方法:reset()清除path设置的所有属性lineTo(float x, float y)方法:lineTo(float x, float y)方法用于从当前轮廓点绘制一条线段到x,y点:从原点开始绘制一条折线,代码如下:Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250);
canvas.drawPath(path, paint);效果图如下:
上图中没有指定 初始轮廓点,默认从0,0点开始
moveTo(float x, float y)方法:
path的moveTo方法将起始轮廓点移至x,y坐标点,默认情况为0,0点
使用moveTo设置轮廓点:代码如下:
Path path = new Path();path.moveTo(20, 200);
path.lineTo(50, 200);
path.lineTo(100, 300);
path.lineTo(200, 350);
canvas.drawPath(path, paint);
效果图如下:
close()方法:
回到初始点形成封闭的曲线
Path path = new Path();path.moveTo(20, 200);
path.lineTo(50, 200);
path.lineTo(100, 300);
path.lineTo(200, 350);
path.close();
canvas.drawPath(path, paint);
效果图如下:
//绘制矩形
Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);//绘制椭圆
canvas.drawOval(new RectF(rect), paint);//绘制两条参考线canvas.drawLine(50, 175, 350, 175, paint);canvas.drawLine(200, 50, 200, 300, paint);
addArc(RectF oval, float startAngle, float sweepAngle)方法:path.addArc方法用于绘制圆弧,这个圆弧取自RectF矩形的内接椭圆上的一部分,圆弧长度由后两个参数决定startAngle:起始位置的角度值sweepAngle:旋转的角度值
Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);
canvas.drawLine(50, 175, 350, 175, paint);
canvas.drawLine(200, 50, 200, 300, paint);
path.reset();path.addArc(new RectF(rect), 30, 60);
canvas.drawPath(path, paint);效果图如下:
注意:如果path.addArc(new RectF(rect), -90, -90);第一个 -90表示,从 -90度开始绘制,第二个 -90 表示 ,逆时针 绘制 90度。arcTo(RectF oval, float startAngle, float sweepAngle)方法:arcTo和addArc的区别:1. addArc可以直接加入一段椭圆弧。使用arcTo还需要使用moveTo指定当前点的坐标。2. arcTo如果当前点坐标和曲线的起始点不是同一个点的话,还会自动添加一条直线补齐路径。Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);
canvas.drawLine(50, 175, 350, 175, paint);
canvas.drawLine(200, 50, 200, 300, paint);
Path path = new Path();
path.moveTo(0, 0);
path.arcTo(new RectF(rect), 0, 90);
//path.addArc(new RectF(rect), 0, 90);
canvas.drawPath(path, paint);效果图如下:
quadTo(float x1, float y1, float x2, float y2)方法:以当前路径结束点为开始点,(x1,y1)为控制点,(x2,y2)为结束点画一条二次贝塞尔曲线(相关贝赛尔曲线请再做查询)Path path = new Path();path.moveTo(20, 50);
path.lineTo(50, 200);
path.quadTo(100, 200, 150, 250);
canvas.drawPath(path, paint);
addCircle(float x, float y, float radius, Direction dir)方法:
使用path绘制圆形,xy为圆的圆心 radius为圆的半径,Direction 为绘制元的方向Diection.CCW 逆时针方向Diection.CW 顺时针方向Path path = new Path();path.reset();
path.addCircle(100, 100, 50, Direction.CW);
canvas.drawPath(path, paint);
addOval(RectF oval, Path.Direction dir)方法:
绘制椭圆,同上绘制圆的方法
addPath(Path src, float dx, float dy)方法:
在已有的Path上通过平移创建新的path:
Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250); canvas.drawPath(path, paint);
path.addPath(path, 100, 0);
canvas.drawPath(path, paint);
效果图如下:
1、自定义view 源码:
package com.example.pathview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
public class PathView extends View {
private Paint paint;
public PathView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public PathView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public PathView(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
paint = new Paint();
paint.setColor(Color.RED);
// 设置画笔宽度
paint.setStrokeWidth(3);
// 消除锯齿
paint.setAntiAlias(true);
// 设置镂空(方便查看效果)
paint.setStyle(Style.STROKE);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// //绘制折线
// Path path = new Path();
// path.lineTo(100,100);
// path.lineTo(100, 200);
// path.lineTo(150, 250);
// path.close();
// canvas.drawPath(path, paint);
// //绘制正方形
// Rect rect = new Rect(100, 100, 300, 250);
// canvas.drawRect(rect, paint);
// //绘制椭圆
// canvas.drawOval(new RectF(rect), paint);
// //绘制线条
// canvas.drawLine(50, 175, 350, 175, paint);
// canvas.drawLine(200, 50, 200, 300, paint);
/**
* addArc(RectF oval, float startAngle, float sweepAngle)方法:
*
* path.addArc方法用于绘制圆弧,这个圆弧取自RectF矩形的内接椭圆上的一部分,圆弧长度由后两个参数决定
*
* startAngle:起始位置的角度值
*
* sweepAngle:旋转的角度值
*
*/
// 绘制圆弧
// Rect rect = new Rect(100, 100, 300, 250);
// Path path = new Path();
// path.reset();
// path.addArc(new RectF(rect), 0, 60);
// canvas.drawPath(path, paint);
/**
* arcTo(RectF oval, float startAngle, float sweepAngle)方法:
* arcTo和addArc的区别:
* 1. addArc可以直接加入一段椭圆弧。使用arcTo还需要使用moveTo指定当前点的坐标。
* 2.arcTo如果当前点坐标和曲线的起始点不是同一个点的话,还会自动添加一条直线补齐路径
*/
// Rect rect = new Rect(100, 100, 300, 250);
// canvas.drawRect(rect, paint);
// canvas.drawLine(50, 175, 350, 175, paint);
// canvas.drawLine(200, 50, 200, 300, paint);
//
// Path path = new Path();
// path.moveTo(0, 0);
// path.moveTo(0, 0);
// path.arcTo(new RectF(rect), 0, 90);
// //path.addArc(new RectF(rect), 0, 90);
// canvas.drawPath(path, paint);
/**
* quadTo(float x1, float y1, float x2, float y2)方法:
* 以当前路径结束点为开始点,(x1,y1)为控制点,(x2,y2)为结束点画一条二次贝塞尔曲线(相关贝赛尔曲线请再做查询)
*/
// Path path = new Path();
//
// path.moveTo(20, 50);
// path.lineTo(50, 200);
// path.quadTo(100, 200, 150, 250);
// canvas.drawPath(path, paint);
/**
* addCircle(float x, float y, float radius, Direction dir)方法:
* 使用path绘制圆形,xy为圆的圆心 radius为圆的半径,
* Direction 为绘制元的方向
* Diection.CCW 逆时针方向Diection.CW 顺时针方向
*/
// Path path = new Path();
//
// path.reset();
// path.addCircle(100, 100, 50, Direction.CW);
// canvas.drawPath(path, paint);
/**
* addOval(RectF oval, Path.Direction dir)方法:
* 绘制椭圆,同上绘制圆的方法
*/
/**
* addPath(Path src, float dx, float dy)方法:
* 在已有的Path上通过平移创建新的path:
*/
Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250);
canvas.drawPath(path, paint);
path.addPath(path, 100, 0);
canvas.drawPath(path, paint);
}
}
2、layout 布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.pathview.PathView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
源码下载地址:
http://download.csdn.net/detail/legend12300/9482718
方法列表:
reset()
lineTo(float x, float y)
moveTo(float x, float y)
close()
path.addArc(oval, startAngle, sweepAngle)
arcTo(RectF oval, float startAngle, float sweepAngle)
quadTo(float x1, float y1, float x2, float y2)
addCircle(float x, float y, float radius, Direction dir)
addOval(RectF oval, Path.Direction dir)
addPath(Path src, float dx, float dy)
Paint初始化操作:
在处理path之前,我们首先对paint做一些初始化操作:
Paint paint = new Paint();
paint.setColor(Color.RED);
//设置画笔宽度
paint.setStrokeWidth(3);
//消除锯齿
paint.setAntiAlias(true);
//设置镂空(方便查看效果)
paint.setStyle(Style.STROKE);reset()方法:reset()清除path设置的所有属性lineTo(float x, float y)方法:lineTo(float x, float y)方法用于从当前轮廓点绘制一条线段到x,y点:从原点开始绘制一条折线,代码如下:Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250);
canvas.drawPath(path, paint);效果图如下:
上图中没有指定 初始轮廓点,默认从0,0点开始
moveTo(float x, float y)方法:
path的moveTo方法将起始轮廓点移至x,y坐标点,默认情况为0,0点
使用moveTo设置轮廓点:代码如下:
Path path = new Path();path.moveTo(20, 200);
path.lineTo(50, 200);
path.lineTo(100, 300);
path.lineTo(200, 350);
canvas.drawPath(path, paint);
效果图如下:
close()方法:
回到初始点形成封闭的曲线
Path path = new Path();path.moveTo(20, 200);
path.lineTo(50, 200);
path.lineTo(100, 300);
path.lineTo(200, 350);
path.close();
canvas.drawPath(path, paint);
效果图如下:
//绘制矩形
Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);//绘制椭圆
canvas.drawOval(new RectF(rect), paint);//绘制两条参考线canvas.drawLine(50, 175, 350, 175, paint);canvas.drawLine(200, 50, 200, 300, paint);
addArc(RectF oval, float startAngle, float sweepAngle)方法:path.addArc方法用于绘制圆弧,这个圆弧取自RectF矩形的内接椭圆上的一部分,圆弧长度由后两个参数决定startAngle:起始位置的角度值sweepAngle:旋转的角度值
Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);
canvas.drawLine(50, 175, 350, 175, paint);
canvas.drawLine(200, 50, 200, 300, paint);
path.reset();path.addArc(new RectF(rect), 30, 60);
canvas.drawPath(path, paint);效果图如下:
注意:如果path.addArc(new RectF(rect), -90, -90);第一个 -90表示,从 -90度开始绘制,第二个 -90 表示 ,逆时针 绘制 90度。arcTo(RectF oval, float startAngle, float sweepAngle)方法:arcTo和addArc的区别:1. addArc可以直接加入一段椭圆弧。使用arcTo还需要使用moveTo指定当前点的坐标。2. arcTo如果当前点坐标和曲线的起始点不是同一个点的话,还会自动添加一条直线补齐路径。Rect rect = new Rect(100, 100, 300, 250);
canvas.drawRect(rect, paint);
canvas.drawLine(50, 175, 350, 175, paint);
canvas.drawLine(200, 50, 200, 300, paint);
Path path = new Path();
path.moveTo(0, 0);
path.arcTo(new RectF(rect), 0, 90);
//path.addArc(new RectF(rect), 0, 90);
canvas.drawPath(path, paint);效果图如下:
quadTo(float x1, float y1, float x2, float y2)方法:以当前路径结束点为开始点,(x1,y1)为控制点,(x2,y2)为结束点画一条二次贝塞尔曲线(相关贝赛尔曲线请再做查询)Path path = new Path();path.moveTo(20, 50);
path.lineTo(50, 200);
path.quadTo(100, 200, 150, 250);
canvas.drawPath(path, paint);
addCircle(float x, float y, float radius, Direction dir)方法:
使用path绘制圆形,xy为圆的圆心 radius为圆的半径,Direction 为绘制元的方向Diection.CCW 逆时针方向Diection.CW 顺时针方向Path path = new Path();path.reset();
path.addCircle(100, 100, 50, Direction.CW);
canvas.drawPath(path, paint);
addOval(RectF oval, Path.Direction dir)方法:
绘制椭圆,同上绘制圆的方法
addPath(Path src, float dx, float dy)方法:
在已有的Path上通过平移创建新的path:
Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250); canvas.drawPath(path, paint);
path.addPath(path, 100, 0);
canvas.drawPath(path, paint);
效果图如下:
1、自定义view 源码:
package com.example.pathview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
public class PathView extends View {
private Paint paint;
public PathView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public PathView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public PathView(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
paint = new Paint();
paint.setColor(Color.RED);
// 设置画笔宽度
paint.setStrokeWidth(3);
// 消除锯齿
paint.setAntiAlias(true);
// 设置镂空(方便查看效果)
paint.setStyle(Style.STROKE);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// //绘制折线
// Path path = new Path();
// path.lineTo(100,100);
// path.lineTo(100, 200);
// path.lineTo(150, 250);
// path.close();
// canvas.drawPath(path, paint);
// //绘制正方形
// Rect rect = new Rect(100, 100, 300, 250);
// canvas.drawRect(rect, paint);
// //绘制椭圆
// canvas.drawOval(new RectF(rect), paint);
// //绘制线条
// canvas.drawLine(50, 175, 350, 175, paint);
// canvas.drawLine(200, 50, 200, 300, paint);
/**
* addArc(RectF oval, float startAngle, float sweepAngle)方法:
*
* path.addArc方法用于绘制圆弧,这个圆弧取自RectF矩形的内接椭圆上的一部分,圆弧长度由后两个参数决定
*
* startAngle:起始位置的角度值
*
* sweepAngle:旋转的角度值
*
*/
// 绘制圆弧
// Rect rect = new Rect(100, 100, 300, 250);
// Path path = new Path();
// path.reset();
// path.addArc(new RectF(rect), 0, 60);
// canvas.drawPath(path, paint);
/**
* arcTo(RectF oval, float startAngle, float sweepAngle)方法:
* arcTo和addArc的区别:
* 1. addArc可以直接加入一段椭圆弧。使用arcTo还需要使用moveTo指定当前点的坐标。
* 2.arcTo如果当前点坐标和曲线的起始点不是同一个点的话,还会自动添加一条直线补齐路径
*/
// Rect rect = new Rect(100, 100, 300, 250);
// canvas.drawRect(rect, paint);
// canvas.drawLine(50, 175, 350, 175, paint);
// canvas.drawLine(200, 50, 200, 300, paint);
//
// Path path = new Path();
// path.moveTo(0, 0);
// path.moveTo(0, 0);
// path.arcTo(new RectF(rect), 0, 90);
// //path.addArc(new RectF(rect), 0, 90);
// canvas.drawPath(path, paint);
/**
* quadTo(float x1, float y1, float x2, float y2)方法:
* 以当前路径结束点为开始点,(x1,y1)为控制点,(x2,y2)为结束点画一条二次贝塞尔曲线(相关贝赛尔曲线请再做查询)
*/
// Path path = new Path();
//
// path.moveTo(20, 50);
// path.lineTo(50, 200);
// path.quadTo(100, 200, 150, 250);
// canvas.drawPath(path, paint);
/**
* addCircle(float x, float y, float radius, Direction dir)方法:
* 使用path绘制圆形,xy为圆的圆心 radius为圆的半径,
* Direction 为绘制元的方向
* Diection.CCW 逆时针方向Diection.CW 顺时针方向
*/
// Path path = new Path();
//
// path.reset();
// path.addCircle(100, 100, 50, Direction.CW);
// canvas.drawPath(path, paint);
/**
* addOval(RectF oval, Path.Direction dir)方法:
* 绘制椭圆,同上绘制圆的方法
*/
/**
* addPath(Path src, float dx, float dy)方法:
* 在已有的Path上通过平移创建新的path:
*/
Path path = new Path();
path.lineTo(100,100);
path.lineTo(100, 200);
path.lineTo(150, 250);
canvas.drawPath(path, paint);
path.addPath(path, 100, 0);
canvas.drawPath(path, paint);
}
}
2、layout 布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.pathview.PathView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
源码下载地址:
http://download.csdn.net/detail/legend12300/9482718
相关文章推荐
- Android之使用Http协议实现文件上传功能
- 菜鸟说给菜鸟听之Beginning Linux Programming——Chapter1(1)
- sqlserver FOR XML PATH 语句的应用
- C#实现图形位置组合转换的方法
- set_include_path在win和linux下的区别
- C#实现判断图形文件格式的方法
- C#实现图形路径变换的方法
- 浅析Cookie中的Path与domain
- cookie中的path与domain属性详解
- php生成图形验证码几种方法小结
- PHP include_path设置技巧分享
- CentOS的图形安装及初始环境设置教程
- C#实现图形区域组合操作的方法
- php实现图形显示Ip地址的代码及注释
- Java Web开发之图形验证码的生成与使用方法
- NodeJS学习笔记之(Url,QueryString,Path)模块
- android中图形图像处理之drawable用法分析
- Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)
- Android开发之图形图像与动画(五)LayoutAnimationController详解
- C++实现图形界面时钟表盘代码