1.创建路径
要创建路径,可以使用android.graphics.Path类来实现。Path类包含一组矢量绘图方法,如画圆、矩形、弧、线条等。常用的绘图方法如下表:
void addArc(RectF oval, float startAngle, float sweepAngle) //为路径添加一个多边形
void addCircle(float x, float y, float radius, Path.Direction dir) //给path添加圆圈
void addOval(RectF oval, Path.Direction dir) //添加椭圆形
void addRect(RectF rect, Path.Direction dir) //添加一个区域
void addRoundRect(RectF rect, float[] radii, Path.Direction dir) //添加一个圆角区域
Path.Direction有两个值:Path.Direction.CCW:是counter-clockwise缩写,指创建逆时针方向的路径;
Path.Direction.CW:是clockwise的缩写,指创建顺时针方向的路径;
void moveTo(float x,float y)设置开始绘制直线的起点
void lineTo(float x,float y)在moveTo()方法设置的起点与该方法指定的结束点之间画一条直线,如果在调用该方法之前没使用moveTo()方法设置起点,那么将从(0,0)点开始绘制直线。
void quadTo(float x1,float y1,float x1,float y2)用于根据指定的参数绘制一条线段轨迹
void close()闭合路径
boolean isEmpty() //判断路径是否为空
void transform(Matrix matrix) //应用矩阵变换
void transform(Matrix matrix, Path dst) //应用矩阵变换并将结果放到新的路径中,即第二个参数。
例如,要创建一个顺时针旋转的圆形路径,可以使用下面的代码
Path path=new Path();//创建并实例化一个path对象
path.addCircle(150,200,60,Path.Direction.CW);//在path对象中添加一个圆形路径
效果如图
要创建一个折线,可以使用下面的代码:
Path myPath=new Path();
myPath.moveTo(50,100);
myPath.lineTo(100,45);
myPath.lineTo(150,100);
myPath.lineTo(200,80);
效果如图
要创建一个三角形路径,可以使用下面的代码:
Path path=new Path();
path.moveTo(50,50);
path.lineTo(100,10);
path.lineTo(150,50);
path.close();
效果如图
2.将定义好的路径绘制在画布上
使用Canvas类提供的drawPath()方法,可以将定义好的路径绘制在画布上。
现在我们实现在屏幕上绘制圆形路径、折线路径、三教路径以及环绕路径的环形文字
具体实现方法:
用来显示自定义的绘图类的布局文件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/frameLayout1"
android:orientation="vertical"
>
</FrameLayout>
打开MainActivity,在文件中创建名为MyView的内部类,继承android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,在里面进行作图:
MainActivity:
package com.example.test;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取布局文件中添加的帧布局管理器
FrameLayout ll=(FrameLayout)findViewById(R.id.frameLayout1);
//将自定义的MyView视图添加到帧布局
ll.addView(new MyView(this));
}
public class MyView extends View{
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);//指定画布的背景颜色为白色
Paint paint=new Paint();//创建一个采用默认设置的画笔
paint.setColor(Color.BLACK);//设置画笔颜色
paint.setAntiAlias(true);//使用抗锯齿功能
paint.setStyle(Style.STROKE);//设置填充方式为描边
//绘制圆形路径
Path pathCircle=new Path();
pathCircle.addCircle(70, 70, 40, Path.Direction.CCW);//添加逆时针的圆形路径
canvas.drawPath(pathCircle, paint);
//绘制折线路径
Path myPath=new Path();
myPath.moveTo(150,100);
myPath.lineTo(200,45);
myPath.lineTo(250,100);
myPath.lineTo(300,80);
canvas.drawPath(myPath, paint);
//绘制三角形路径
Path pathTr=new Path();
pathTr.moveTo(350,80);
pathTr.lineTo(400,30);
pathTr.lineTo(450,80);
pathTr.close();
canvas.drawPath(pathTr, paint);
//绘制环绕型的文字
String str="风萧萧兮易水寒,壮士一去兮不复还";
Path path=new Path();
path.addCircle(550, 100, 48, Path.Direction.CW);//创建顺时针的圆形路径
paint.setStyle(Style.FILL);//设置画笔的填充方式
canvas.drawTextOnPath(str, path, 0, -18, paint);
super.onDraw(canvas);
}
}
}
画出的效果如图
转载请注明出处:http://blog.csdn.net/acmman/article/details/45307025