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对象,然后 ...
随机推荐
- FDR
声明: 网上摘抄 False discovery rate (FDR) control is a statistical method used in multiple hypothesis test ...
- pthread的线程安全性
pthread不一定能够保证线程安全性,特别是在开启编译器优化的情况下,某些编译器优化很可能破坏pthread的线程安全性. 由于不同的编译器可能有不同的优化技术,所以pthread的实现与编译器有很 ...
- Android中GC_EXTERNAL_ALLOC的含义
GC_FOR_MALLOC means that the GC was triggered because there wasn't enough memory left on the heap to ...
- 148. Sort List
Sort a linked list in O(n log n) time using constant space complexity. 代码如下: /** * Definition for si ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp
odd-even number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备
1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...
- Spring AOP 实现写事件日志功能
什么是AOP?AOP使用场景?AOP相关概念?Spring AOP组件?如何使用Spring AOP?等等这些问题请参考博文:Spring AOP 实现原理 下面重点介绍如何写事件日志功能,把日志保存 ...
- zboot/piggyback.c
/* * linux/zBoot/piggyback.c * * (C) 1993 Hannu Savolainen */ /* * This program reads the c ...
- php部分--数组(包含指针思想遍历数组);
1.创建并输出数组 (1)相同数据类型的数组$attr=array(1,2,3,4,5); print_r($attr); echo "<br>"; $sttr1=ar ...
- (转)word2vec前世今生
word2vec 前世今生 2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效 ...