PathEffect
2016-03-05 11:17
381 查看
PathEffect
前言:Path类是绘图里的一个常用类之一,会按照指定的路径绘制图形,如果将画笔的Style设定为Stroke,则会看到由一条条线组成图形。然而这些图形看上去往往很单调,而且有的时候我们也需要绘制虚线,或者由一些小的图形来沿着一定的路径组成图形,API接口里其实提供了这个功能,使用PathEffect就可以完成这些比较特殊一些的效果。首先还是看一下PathEffect这个类:一:PathEffect的各个子类代表的意思?
①这个类本身并没有做什么特殊的处理,只是继承了Object,
②通常我们使用的是它的几个子类,就是上面图片中所显示的。
③在使用的时候,通常是PathEffect pe = new 一个具体的子类;
④然后使用Paint的setPathEffect(PathEffect pe)方法即可。
二:CornerPathEffect:
这个类的作用就是将Path的各个连接线段之间的夹角用一种更平滑的方式连接,类似于圆弧与切线的效果。
一般的,通过CornerPathEffect(float radius)指定一个具体的圆弧半径来实例化一个CornerPathEffect。
三:DashPathEffect:
这个类的作用就是将Path的线段虚线化。构造函数为DashPathEffect(float[] intervals, float offset),其中intervals为虚线的ON和OFF数组,该数组的length必须大于等于2,phase为绘制时的偏移量。
四:DiscretePathEffect:
这个类的作用是打散Path的线段,使得在原来路径的基础上发生打散效果。
一般的,通过构造DiscretePathEffect(float segmentLength,float deviation)来构造一个实例,其中,segmentLength指定最大的段长,deviation指定偏离量。
五:PathDashPathEffect:
这个类的作用是使用Path图形来填充当前的路径,其构造函数PathDashPathEffect (Path shape, float advance, float phase,PathDashPathEffect.Stylestyle)。
shape则是指填充图形,advance指每个图形间的间距,phase为绘制时的偏移量,style为该类自由的枚举值,有三种情况:Style.ROTATE、Style.MORPH和
Style.TRANSLATE。其中ROTATE的情况下,线段连接处的图形转换以旋转到与下一段移动方向相一致的角度进行转转,MORPH时图形会以发生拉伸或压缩等变形的情况与下一段相连接,TRANSLATE时,图形会以位置平移的方式与下一段相连接。
六:ComposePathEffect:
组合效果,这个类需要两个PathEffect参数来构造一个实例,ComposePathEffect
(PathEffect outerpe,PathEffect innerpe),表现时,会首先将innerpe表现出来,然后再在innerpe的基础上去增加outerpe的效果。
七:SumPathEffect:
叠加效果,这个类也需要两个PathEffect作为参数SumPathEffect(PathEffect first,PathEffect second),但与ComposePathEffect不同的是,在表现时,会分别对两个参数的效果各自独立进行表现,然后将两个效果简单的重叠在一起显示出来。
八:eg:
/** * PathEffect 绘制效果 * 分类:ComposePathEffect==先显示效果1, 后2 * CornerPathEffect==圆弧 * DashPathEffect==虚化 * DiscretePathEffect==打散 * PathDashPathEffect==填充 * SumPathEffect==两种效果同时 * @author Administrator * 画图:准备好画笔,并设置画笔风格。准备好要画的图形或图像 */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myView mv=new myView(this); setContentView(mv); } class myView extends View{ private Paint paint; private Path path; private int[] colors; private PathEffect[] effect=new PathEffect[7]; private float phase=0; public myView(Context context) { super(context); paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(4); path = new Path(); path.moveTo(0, 0); for(int i=0;i<=15;i++){ path.lineTo(i*20, (float) (Math.random()*60)); } colors = new int[]{Color.BLACK,Color.BLUE,Color.CYAN,Color.GREEN,Color.MAGENTA,Color.RED,Color.YELLOW}; } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.WHITE); effect[0]=null;//无效果 effect[1]=new CornerPathEffect(10);//拐角圆弧效果 effect[2]=new DiscretePathEffect(3.0f, 5.0f);//打散效果 effect[3]=new DashPathEffect(new float[]{20,10,5,10},phase);//虚化效果 Path p=new Path(); p.addRect(0, 0, 8, 8, Path.Direction.CCW); effect[4]=new PathDashPathEffect(p, 30, phase, PathDashPathEffect.Style.ROTATE); effect[5]=new ComposePathEffect(effect[2], effect[4]); effect[6]=new SumPathEffect(effect[4], effect[3]); canvas.translate(8, 8); for(int i=0;i<effect.length;i++){ paint.setPathEffect(effect[i]); paint.setColor(colors[i]); canvas.drawPath(path, paint); canvas.translate(0, 60); } phase+=1; invalidate(); } } }
相关文章推荐
- 前端开发 基础知识 dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
- jquery extend 函数详解
- html,body最顶层元素.
- 深入解析CSS中z-index属性对层叠顺序的处理
- leetcode237 Delete Node in a Linked List
- Html学习笔记
- [转]使用Sencha Ext JS 6打造通用应用程序
- 关于ExtJS、JQuery UI和easy UI的选择问题
- CSS编写时的高性能以及高维护性代码优化建议总结
- 《JavaScript权威指南(第六版)》知识点总结(一)
- bootstrap简介
- html学习第一天
- [重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏
- English-The Best Time of My Life
- chrome通过file协议浏览html代码时,发送的ajax请求本地文件,会报跨域错误
- FastJson 解析报错deserializer error
- FastJson 解析报错deserializer error
- JavaScript和jQuery实现淘宝搜索栏的制作
- JavaScript和JQuery实现必应搜索
- web前端开发常用链接