【Android开发】图形图像处理技术-绘制路径

来源:互联网 发布:客服淘宝女装回复技巧 编辑:程序博客网 时间:2024/05/21 09:54
在Android中提供了绘制路径的功能。绘制一条路径可以分为创建路径和将定义好的路径绘制在画布上两部分,下面分别进行介绍。

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}@Overrideprotected 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

0 0
原创粉丝点击