在下面的代码中,穿插了一下关于drawTextOnPath这个方法的使用,对于这个method有兴趣的,记得查找api。。。或者博客
//Path主要用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案
// cliprect 只有在这个区域内的才显示,其他所有内容好像被裁剪掉了一样,不显示。
//Android graphics。path的使用方法
//(weizhengli )
//1. Path--->quadTo(float x1, float y1, float x2, float y2):
// 该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,
//该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,
//x2,y2为终点的坐标值;
//2. Path--->lineTo(float x, float y) :
// 该方法实现的仅仅是两点连成一线的绘制线路
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.View;
public class Myview extends View {
private Path path;
private Paint paint;
private Path[] paths = new Path[3];
Paint paint2;
public Myview(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);
paint2 = new Paint();
paint2.setColor(Color.WHITE);
paint2.setTextSize(30);
paths[0] = new Path();
paths[0].moveTo(0, 0);
for (int i = 0; i < 15; i++) {// 一条线的路径
paths[0].lineTo(i * 30, (float) Math.random() * 60);
}
paths[1] = new Path();
RectF oval = new RectF(0, 0, 300, 200);// 指明一个矩形,为下面的椭圆指明范围,java类
paths[1].addOval(oval, Path.Direction.CCW);// 一个椭圆的路径
paths[2] = new Path();
paths[2].addArc(oval, 60, 180);// 一个弧线的路径
paint = new Paint();
paint.setColor(Color.GREEN);
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
paint.setTextAlign(Align.RIGHT);
paint.setTextSize(60);
path = new Path();
}
private void drawScene(Canvas canvas) {
canvas.clipRect(0, 0, 100, 100);
canvas.drawColor(Color.WHITE);
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, paint);
paint.setColor(Color.GREEN);
canvas.drawCircle(30, 70, 30, paint);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.GRAY);
canvas.save();
canvas.translate(10, 10);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160, 10);
canvas.clipRect(10, 10, 90, 90);
canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE); // 差数
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(10, 160);
path.reset();
canvas.clipPath(path);
path.addCircle(50, 50, 50, Path.Direction.CCW);
canvas.clipPath(path, Region.Op.REPLACE);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160, 160);
canvas.clipRect(0, 0, 60, 60);
canvas.clipRect(40, 40, 100, 100, Region.Op.UNION); //
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(10, 310);
canvas.clipRect(0, 0, 60, 60);
canvas.clipRect(40, 40, 100, 100, Region.Op.XOR);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160, 310);
canvas.clipRect(0, 0, 60, 60);
canvas.clipRect(40, 40, 100, 100, Region.Op.REVERSE_DIFFERENCE);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160, 480);
canvas.drawTextOnPath("sssssssssssssssssssssssssssssssss", paths[0], 0, 0, paint);
canvas.restore();
}
// INTERSECT 取两者交集,默认的方式
// DIFFERENCE 第一次不同于第二次的部分显示出来
// REPLACE 显示第二次的
// REVERSE_DIFFERENCE 第二次不同于第一次的部分显示
// UNION 取全集
// XOR 补集,就是全集的减去交集的剩余部分显示
// Path.Direction.CCW
// 逆时针
// Path.Direction.CW
// 顺时针
}
(部分代码是从其他博客上截取的)。。。别介意那首歌。。。
最后,补充一下关于path的使用,在代码中关于path【0】中,可以看出来,首先是path一个,然后是开始加点的坐标,接着是画图,然后就没了