Android 中关于PathEffect子类的效果(中级)
Android 中关于PathEffect子类的效果(中级)
可以参考APIDeam中 Graphis--PathEffects 的效果 在对比自己写出的效果
上代码
private static class patheffect extends View{
private int [] color;
private PathEffect[]patheffect=new PathEffect[7];
private Paint paint;
private float phase;
private Path path;
/*
* 初始化工作
*/
public patheffect(Context context) {
super(context);
paint =new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
color=new int[]{
Color.BLACK,Color.BLUE,Color.YELLOW,Color.RED,Color.GRAY,Color.GREEN,Color.CYAN};
path=new Path();
path.moveTo(0, 0);
for(int i=1;i<15;i++){//画出15个点 连成一条线
path.lineTo(i*20, (float)Math.random()*60);
}
// path.close(); 如果有这句话 第一个点会和最后一个点关联 如图一 没有如图二
}
/* 下面测试PathEffect的子类
* ComposePathEffect, CornerPathEffect, DashPathEffect,
* DiscretePathEffect, PathDashPathEffect, SumPathEffect
* 建议自己测试一下 自己看效果就回明白这些子类的作用了
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
patheffect[0]=null;
patheffect[1]=new CornerPathEffect(10);
patheffect[2]=new DiscretePathEffect(3, 5);
patheffect[3]= new DashPathEffect(new float[]{20,10,5,10}, 10);
Path p=new Path();
p.addRect(0, 0, 8, 8, Path.Direction.CCW);
patheffect[4]=new PathDashPathEffect(p, 12, phase, PathDashPathEffect.Style.ROTATE);
patheffect[5]=new SumPathEffect(patheffect[3], patheffect[4]);
patheffect[6]=new ComposePathEffect(patheffect[3], patheffect[4]);
canvas.translate(8, 8);
for(int i=0;i<patheffect.length;i++){
paint.setColor(color[i]);
paint.setPathEffect(patheffect[i]);
canvas.drawPath(path, paint);
canvas.translate(0, 60);
}
phase+=1;//这里的phase 如果不自增 是没有动画效果的 phase制定路径效果的相位
invalidate();//回调onDdraw 重新绘制
}
}
大家可以看每条线的效果 对应
本文出自 “美丽的奇葩” 博客,请务必保留此出处http://skyoceanone.blog.51cto.com/3483859/683886
相关新闻>>
- 发表评论
-
- 最新评论 更多>>