Android之Path类

转载 2013年12月05日 15:20:36

Path类可以预先在View上将N个点连成一条"路径",然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形

Android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类

ComposePathEffect

CornerPathEffect

DashPathEffect

DiscretePathEffect

PathDashPathEffect

SumPathEffect

下面的示例将会逐一使用上面的绘制效果

package com.android.xiong.pathtest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DashPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathDashPathEffect;
import android.graphics.PathEffect;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new MyView(this));
	}

	class MyView extends View {

		float phase;
		PathEffect[] effects = new PathEffect[7];
		int[] colors;
		private Paint paint;
		Path path;

		public MyView(Context context) {
			super(context);
			paint = new Paint();
			paint.setStyle(Paint.Style.STROKE);
			paint.setStrokeWidth(4);
			// 创建并初始化Path
			path = new Path();
			path.moveTo(0, 0);
			for (int i = 1; i <= 15; i++) {
				// 生成15个点,随机生成它们的坐标,并将它们连成一条Path
				path.lineTo(i * 20, (float) Math.random() * 60);
			}
			// 初始化7个颜色
			colors = new int[] { Color.RED, Color.BLUE, Color.GREEN,
					Color.YELLOW, Color.BLACK, Color.MAGENTA, Color.CYAN };
		}

		@Override
		protected void onDraw(Canvas canvas) {
			// 将背景填充白色
			canvas.drawColor(Color.WHITE);
			// -----下面开始初始化7中路径效果-------
			// 不实用路径
			effects[0] = null;
			// 使用CornerPathEffect路径效果
			effects[1] = new CornerPathEffect(10);
			// 初始化DiscretePathEffect
			effects[2] = new DiscretePathEffect(3.0f, 5.0f);
			// 初始化DashPathEffect
			effects[3] = new DashPathEffect(new float[] { 20, 10, 5, 10 },
					phase);
			Path p = new Path();
			p.addRect(0, 0, 8, 8, Path.Direction.CCW);
			effects[4] = new PathDashPathEffect(p, 12, phase,
					PathDashPathEffect.Style.ROTATE);
			// 初始化PathDashPasheEffect
			effects[5] = new ComposePathEffect(effects[2], effects[4]);
			effects[6] = new ComposePathEffect(effects[4], effects[3]);
			// 将画布移动到(8,8)处开始绘制
			canvas.translate(8, 8);
			// 依次使用7中不同的路径效果、7中不同的颜色来绘制路径
			for (int i = 0; i < effects.length; i++) {
				paint.setPathEffect(effects[i]);
				paint.setColor(colors[i]);
				canvas.drawPath(path, paint);
				canvas.translate(0, 60);

			}
			// 改变phase值,形成动画效果
			phase += 1;
			invalidate();

		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



Android中Path类的lineTo方法和quadTo方法画线的区别

但我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式是不一样的;    1. Path--->quadTo(float x, f...
  • stevenhu_223
  • stevenhu_223
  • 2013年07月02日 23:42
  • 59245

android.graphics.Path

谷歌翻译:Path类封装了多个化合物(轮廓)组成的直线段,二次曲线,三次曲线的几何路径。它可以绘制与canvas.drawPath(path, paint),无论是填充或抚摸(基于涂料的样式),或它...
  • liu149339750
  • liu149339750
  • 2013年03月24日 21:37
  • 5584

Android删除本地缓存数据(经测)

在android开发中,有时候会因为一些图片或者一些重要信息存储在手机存储空间里面,导致占内存。自己写清除有点麻烦。下面是整合好的代码。 /** * 文 件 名: DataCleanMana...
  • ysh0011
  • ysh0011
  • 2016年08月27日 14:05
  • 874

清空Android缓存目录

/** * @param context * 删除缓存 */ public static void clearAllCache(Context co...
  • hubianyu
  • hubianyu
  • 2018年01月16日 17:02
  • 19

Android基础之Path类的使用

Android基础之Path类的使用我们知道Android中Canvas类对象可以进行绘制事物,里面有一个方法为canvas.drawPath方法,这个方法就是用来绘制我们的自定义Path对象。Pat...
  • Mr_dsw
  • Mr_dsw
  • 2015年10月06日 15:00
  • 7532

Android中Path类的lineTo方法和quadTo方法画线的区别

最近在工作中接触到了贝塞尔曲线绘图,在自学中刚好看到这篇优秀的文章,特意转来参考。 当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的...
  • ljw124213
  • ljw124213
  • 2016年11月18日 10:25
  • 434

android,如果某个文件存在就删除

package com.example.deletefile_1; import java.io.File; import android.app.Activity; import android...
  • u010002184
  • u010002184
  • 2016年04月30日 17:34
  • 1906

Android文件路径小结

Android文件存储可分为内部存储和外部存储。内部存储(InnerStorage)应用私有,应用被卸载,文件删除。外部储存(ExternalStorage)可分为外部公用区域(App卸载文件保留)和...
  • android_gogogo
  • android_gogogo
  • 2017年03月02日 13:24
  • 115

Android开发之Path类使用详解,自绘各种各样的图形!

玩过自定义View的小伙伴都知道,在View的绘制过程中,有一个类叫做Path,Path可以帮助我们实现很多自定义形状的View,特别是配合xfermode属性来使用的时候。OK,那我们今天就来看看P...
  • u012702547
  • u012702547
  • 2016年09月10日 17:54
  • 3605

Android Path 解析

最近看了一些关于android path的使用,这里做个总结,方便以后查阅 Path主要用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案 方法列表: reset()        ...
  • w124374860
  • w124374860
  • 2015年04月11日 14:16
  • 25549
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之Path类
举报原因:
原因补充:

(最多只允许输入30个字)