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 ...
- 双系统安装要点 - imsoft.cnblogs
1.用磁盘工具 取消当前激活分区,并隐藏当前激活分区2.按照普通的形式安装系统 Ghost安装和简单安装都可以3用修复启动项工具 修复之前处隐藏的系统启动项 OK,再就不会看到烦人的蓝屏了!
- SM30维护视图添加按钮
转自http://blog.csdn.net/tsj19881202/article/details/7517232 遇到某需求,要求维护sm30的视图时,能加上排序按钮. 基本参考: http:// ...
- android中的空格及汉字的宽度
在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: 窄空格: 一个汉字宽度的空格: [用两个空格( )占一个汉字的宽度时,两个空格比 ...
- 关于Toad连接DB2的sqlstate=08001错误
新装的centos6.3+db29.7,数据库导入完了的之后用Toad连接访问之的时候出错了. DB2 Database Error: ERROR [08001] [IBM] SQL30081N A ...
- leetcode 121. Best Time to Buy and Sell Stock ----- java
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- 铺地毯 2011年NOIP全国联赛提高组
题目描述 Description 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有n 张地毯,编号从1 到n.现在将这些地毯按照编号从 ...
- codeforces 725/C
Hidden Word time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- Java——多线程
/* * 进程: 正在 进行中的程序 * 线程:就是进程中一个负责程序执行的控制单元(执行路径) * 一个进程中可以有多个执行路径,称之为多线程. * * 一个进程中至少要有一个线程. * * ...
- ceph
http://docs.ceph.com/docs/master/radosgw/swift/java/