PathEffect

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();
		}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了制作英文的标准轨迹,你需要在自定义Textview中使用Paint类的PathEffect方法来实现。具体步骤如下: 1. 创建一个Path对象,用于存储标准轨迹的路径信息。 2. 创建一个Paint对象,设置其Style为STROKE,表示只绘制轮廓线,不填充颜色。 3. 调用Paint对象的setPathEffect方法,将其参数设置为PathDashPathEffect对象,用于指定标准轨迹的形状、间距等信息。 4. 在onDraw方法中利用Canvas对象的drawPath方法绘制出需要添加标准轨迹的文本。 举个例子: ``` public class CustomTextView extends TextView { private Path mPath; public CustomTextView(Context context) { super(context); init(); } public CustomTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mPath = new Path(); // 设置标准轨迹的形状为一条直线 mPath.moveTo(0, 0); mPath.lineTo(10, 5); mPath.lineTo(20, 0); // 创建Paint对象,并设置其PathEffectPathDashPathEffect Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(1); paint.setPathEffect(new PathDashPathEffect(mPath, 20, 0, PathDashPathEffect.Style.TRANSLATE)); setPaintFlags(getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); setTextColor(Color.BLACK); setPadding(10, 10, 10, 10); setText("Hello World!"); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制带有标准轨迹的文本 canvas.drawPath(mPath, getPaint()); } } ``` 这样,你就可以在你的自定义Textview中实现添加英文标准轨迹的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值