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的更多相关文章

  1. android学习笔记42——图形图像处理2——绘图

    绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...

  2. android学习笔记41——图形图像处理1

    图像图像处理 ImageView:用于显示普通静态图片: AnimationDrawable:用于开发逐帧动画: Animation:用于对普通图片使用补间动画: Bitmap.BitmapFacto ...

  3. 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart

    目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...

  4. 【转】Pro Android学习笔记(十二):了解Intent(下)

    解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...

  5. 【转】Pro Android学习笔记(七):了解Content Provider(下上)

    我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...

  6. 【转】Pro Android学习笔记(五):了解Content Provider(上)

    Content Provider是抽象数据封装和数据访问机制,例如SQLite是Android设备带有的数据源,可以封装到一个content provider中.要通过content provider ...

  7. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  8. Android学习笔记进阶18之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  9. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

随机推荐

  1. TCP三次握手连接与四次握手断开

    http://blog.csdn.net/whuslei/article/details/6667471(三次握手与四次握手) 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机. 如 ...

  2. 彻底弄懂css中单位px和em,rem的区别 转的自己看

    国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的 ...

  3. SQLite 字段类型

    一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断. SQLite具有以下五种数据类型: 1.NULL:空值. 2.INTEGER:带符号的整型,具体取决有存入 ...

  4. 让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成

    让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边     点击链接后不跳转可以设置成     1.<a href="javascri ...

  5. iframe session过期跳转到登陆页面

    在login.jsp中添加js: if(window !=top){ top.location.href=location.href; } <script type="text/jav ...

  6. leetcode 139. Word Break ----- java

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...

  7. 改造dede 后台会员目录

    可以在后台目录(默认 dede),里面的inc->inc_menu.php 文件里进行添加或更改,实现功能!

  8. 【NOIP2013】火柴排队

    如果没有这道题的话我连逆序对是啥都不知道QAQ 原题: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ...

  9. Python爬虫学习笔记——防豆瓣反爬虫

    开始慢慢测试爬虫以后会发现IP老被封,原因应该就是单位时间里面访问次数过多,虽然最简单的方法就是降低访问频率,但是又不想降低访问频率怎么办呢?查了一下最简单的方法就是使用转轮代理IP,网上找了一些方法 ...

  10. bootstrap源码里的function加上了+号

    一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascript组件是这样写的 !function( $ ){ ...