android学习笔记43——图形图像处理3——Path
Path类
Path类可以预先在View上将N个点连成一条“路径”,然后调用Canavas的drawPath(path,paint)即可沿着路径绘制图形。
android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类——每一个子类代表一种绘制方法:
1.ComposePathEffect
2.CnonerPathEffect
3.DashPathEffect
4.DiscretePathEffect
5.PathDashPathEffect
6.SumPathEffect
实例如下:
代码实现==》
package com.example.mypath; import android.os.Bundle;
import android.annotation.SuppressLint;
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.graphics.SumPathEffect;
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(10);
// 创建并初始化Path
path = new Path();
path.moveTo(0, 0);
for (int i = 0; i <= 15; i++)
{
// 生成15个点,随记生成他们的Y坐标,并将它们连成一条Path
path.lineTo(i * 30, (float) Math.random() * 100);
}
// 初始化7个颜色
colors = new int[] { Color.BLACK, Color.YELLOW, Color.GRAY, Color.GREEN, Color.BLUE,
Color.RED, Color.CYAN };
} @SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas)
{
// 将背景色填充为白色
canvas.drawColor(Color.WHITE); // 初始化7种路径效果
effects[0] = null;// 不使用路径效果
effects[1] = new CornerPathEffect(10);// 使用CornerPathEffect路径效果
effects[2] = new DiscretePathEffect(3.0f, 5.0f);// 初始化DiscretePathEffect
effects[3] = new DashPathEffect(new float[] { 20, 10, 5, 10 }, phase);// 初始化DashPathEffect Path p = new Path();
p.addRect(0, 0, 8, 8, Path.Direction.CCW);
effects[4] = new PathDashPathEffect(p, 123, phase, PathDashPathEffect.Style.ROTATE);// 初始化PathDashPathEffect
effects[5] = new ComposePathEffect(effects[2], effects[4]);// 初始化ComposePathEffect
effects[6] = new SumPathEffect(effects[4], effects[3]);// 初始化SumPathEffect // 依次使用7种不同效果路径、7种不同的颜色来绘制路径
for (int j = 0; j < effects.length; j++)
{
paint.setPathEffect(effects[j]);
paint.setColor(colors[j]);
canvas.drawPath(path, paint);
canvas.translate(0, 120);
}
// 改变phase值,形成动画效果
phase++;
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;
} }
运行效果如下:

注意:如以上程序,当定义DashPathEffect、PathDashPathEffect时可指定一个phase参数,该参数用于指定路径效果的相位,当该参数
改变时,绘制效果也略有变化。上面程序不停的改变phase参数,并不停的重绘该View组件——将参数如上图所示动画效果。
除此之外,android的Canvas还提供了一个drawTextOnPath(String text,Path path,float hOffect,float vOffset,Paint paint)方法,该方法可以沿着Path绘制文本。
其中hOffset参数指定水平偏移、vOffset指定垂直偏移。
实例二如下:


android学习笔记43——图形图像处理3——Path的更多相关文章
- android学习笔记42——图形图像处理2——绘图
绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...
- android学习笔记41——图形图像处理1
图像图像处理 ImageView:用于显示普通静态图片: AnimationDrawable:用于开发逐帧动画: Animation:用于对普通图片使用补间动画: Bitmap.BitmapFacto ...
- 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart
目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(七):了解Content Provider(下上)
我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...
- 【转】Pro Android学习笔记(五):了解Content Provider(上)
Content Provider是抽象数据封装和数据访问机制,例如SQLite是Android设备带有的数据源,可以封装到一个content provider中.要通过content provider ...
- Android学习笔记进阶18 之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
- Android学习笔记进阶18之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
随机推荐
- less 快捷操作
查找操作: /pattern 向前查找包含pattern的行 ?pattern 向后查找包含pattern的行 n 查找下一个pattern 的行 N 查找上一个pattern的行 ESC-u ...
- TCP/IP 协议大致的概念
最近在看<图解HTTP>和<HTTP权威指南>,对TCP/IP大致过了一下. TCP/IP 不仅仅是TCP 和 IP TCP/IP 是协议族,与之相对的事IEEE等标准组织设 ...
- Container ViewController初探1
今天调试程序遇到个问题,iOS7下在弹出Modal的子界面时,弹出层次不对,键盘和界面被分割在了Window的两侧,导致显示异常Presenting view controllers on detac ...
- ZOJ 1105 FatMouse’s Tour
原题链接 题目大意:FM要去逛街,他可以走任何街道,在任何路口转弯.他走一条陌生街道的速度是20公里每小时,走一条熟悉街道的速度是50公里每小时.输入是街道信息,输出消耗时间. 解法:本质就是浮点运算 ...
- Integer相加产生的类型转换问题
做项目时犯二没有搞清楚优先级的问题从而暴露出一个Integer相加而产生的类型转换的问题 Integer a; Integer b; Integer c; c= a+b==null?a:b; jav ...
- Dijkstra + 优先队列优化 模板
#include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...
- thinkphp3.2 学习
http://www.tuicool.com/articles/nQFnQrR 1,sublime text 增强插件 右键可以打开文件目录 http://www.w3cfuns.com/notes/ ...
- 【转】win7 uac关闭
方法1: 原文网址:http://jingyan.baidu.com/article/c275f6bae2650ce33d756795.html 首先点击开始,并在输入框中输入“MSCONFIG”,打 ...
- Hive 安装配置记录
http://yymmiinngg.iteye.com/blog/708230 export HADOOP_HOME_WARN_SUPPRESS=1 export JAVA_HOME=/home/ha ...
- unity3d中切换武器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...