今天来了解一下PathDashPathEffect的简单使用,PathDashPathEffect与DashPathEffect的功能很像,不一样的就是它中间的实线部分,可以是我自定义的图形。看一下,方法
public PathDashPathEffect(Path shape, float advance, float phase,
Style style) {
native_instance = nativeCreate(shape.ni(), advance, phase,
style.native_style);
}
官方的解释是:
shape是填充的图形,这个图形可以自己绘制,
advance是图形之间的间距,
phase是path的偏移量,
其中有3种style,TRANSLATE是指图形以平移的方式填充path,ROTATE会根据path的旋转而旋转,MORPH和ROTATE差不多,不过有一点就是MORPH会在转角的连接处以平滑的方式连接
(这里说明一下,MORPH,这个我试了一下,使用这个style,显示不出来,不知道为什么,如果有知道,请告诉我一下)
好了,话不多说,直接上代码,就一切都明白了
public class PathDashView extends View {
private Paint mPaint;
private Path mPath1;
private Path mPath2;
private Path mPath;
private Paint mPaint1;
private Paint mPaint2;
private Path pPath;
private Path pPath2;
private PathEffect mPathEffect;
private PathEffect mPathEffect1;
private PathEffect mPathEffect2;
public PathDashView(Context context) {
this(context,null);
}
public PathDashView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public PathDashView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
mPaint.setColor(Color.RED);
mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint1.setStyle(Paint.Style.STROKE);
mPaint1.setStrokeWidth(5);
mPaint1.setColor(Color.RED);
mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint2.setStyle(Paint.Style.STROKE);
mPaint2.setStrokeWidth(5);
mPaint2.setColor(Color.RED);
mPath = new Path();
mPath.moveTo(0,300);
mPath.lineTo(200,300);
mPath.lineTo(400,100);
mPath.lineTo(600,400);
mPath1 = new Path();
mPath1.moveTo(0,350);
mPath1.lineTo(200,350);
mPath1.lineTo(400,150);
mPath1.lineTo(600,450);
mPath2 = new Path();
mPath2.moveTo(0,400);
mPath2.lineTo(200,400);
mPath2.lineTo(400,200);
mPath2.lineTo(600,500);
//第一种间隔,小圆点
pPath = new Path();
pPath.addCircle(0,0,5,Path.Direction.CW);
//第二种间隔,小三角
pPath2 = new Path();
pPath2.moveTo(5,0);
pPath2.lineTo(0,5);
pPath2.lineTo(10,5);
pPath2.lineTo(5,0);
mPathEffect = new PathDashPathEffect(pPath,20,0,PathDashPathEffect.Style.ROTATE);
mPathEffect1 = new PathDashPathEffect(pPath,20,0,PathDashPathEffect.Style.TRANSLATE);
mPathEffect2 = new PathDashPathEffect(pPath2,20,6,PathDashPathEffect.Style.ROTATE);
mPaint.setPathEffect(mPathEffect);
mPaint1.setPathEffect(mPathEffect1);
mPaint2.setPathEffect(mPathEffect2);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(mPath,mPaint);
canvas.drawPath(mPath1,mPaint1);
canvas.drawPath(mPath2,mPaint2);
}
}