Path主要用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案
方法列表:
reset()
lineTo(float x, float y)
moveTo(float x, float y)
close()
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);
效果图如下:
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