android SurfaceView绘制 重新学习--切图clipRect详解
解释都在代码注释中:
public class SampleView extends View {
private Paint mPaint;
private Path mPath; public SampleView(Context context) {
super(context);
setFocusable(true); mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(6);
mPaint.setTextSize(16);
mPaint.setTextAlign(Paint.Align.RIGHT); mPath = new Path();
} private void drawScene(Canvas canvas) {
canvas.clipRect(0, 0, 100, 100); canvas.drawColor(Color.WHITE); mPaint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, mPaint); mPaint.setColor(Color.GREEN);
canvas.drawCircle(30, 70, 30, mPaint); mPaint.setColor(Color.BLUE);
canvas.drawText("Clipping", 100, 30, mPaint);
} @Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.GRAY);
canvas.save();
canvas.translate(10, 10);
drawScene(canvas);
canvas.restore(); // Region.Op.DIFFERENCE B-A
canvas.save();
canvas.translate(160, 10);
canvas.clipRect(10, 10, 90, 90); // B
canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE); // A
drawScene(canvas);
canvas.restore(); // 这里因为在3.0以上的硬件上开启了硬件加速,会有问题.
// Region.Op.REPLACE 不论A和B的集合状况,B的范围将全部进行显示,如果和A有交集,则将覆盖A的交集范围
// canvas.save();
// canvas.translate(10, 160);
// mPath.reset();
// canvas.clipPath(mPath); // B
// mPath.addCircle(50, 50, 50, Path.Direction.CCW);
// canvas.clipPath(mPath, Region.Op.REPLACE);// A
// drawScene(canvas);
// canvas.restore(); // Region.Op.UNION AB并集范围
canvas.save();
canvas.translate(160, 160);
canvas.clipRect(0, 0, 60, 60);// B
canvas.clipRect(40, 40, 100, 100, Region.Op.UNION);// A
drawScene(canvas);
canvas.restore(); // Region.Op.XOR 异或,去掉AB相交的部分
canvas.save();
canvas.translate(10, 310);
canvas.clipRect(40, 40, 100, 100); // B
canvas.clipRect(0, 0, 60, 60, Region.Op.XOR); // A
drawScene(canvas);
canvas.restore(); // Region.Op.REVERSE_DIFFERENCE A-B
canvas.save();
canvas.translate(160, 310);
canvas.clipRect(0, 0, 60, 60); // B
canvas.clipRect(40, 40, 100, 100, Region.Op.REVERSE_DIFFERENCE);// A
drawScene(canvas);
canvas.restore();
}
}
这个在游戏中还是很常用的。
关于硬件加速的问题,http://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling
谷歌文档说的很清楚。
android SurfaceView绘制 重新学习--切图clipRect详解的更多相关文章
- ps切图抠图详解-web前端(转)
网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图. 我们通过设计稿,得到我们想要的产出物(如.p ...
- android SurfaceView绘制 重新学习--控制动画移动
直接上demo,图是自己切的,将就用吧.点击左右两边分别向左右移动. public class MySurfaceView extends SurfaceView implements Callbac ...
- android SurfaceView绘制 重新学习--基础绘制
自从大二写了个android游戏去参加比赛,之后就一直写应用,一直没用过SurfaceView了,现在进入了游戏公司,准备从基础开始重新快速的学一下这个,然后再去研究openGL和游戏引擎. 直接上代 ...
- Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
[Android布局学习系列] 1.Android 布局学习之——Layout(布局)详解一 2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数) 3.And ...
- 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践
本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...
- Asp.Net MVC学习总结之过滤器详解(转载)
来源:http://www.php.cn/csharp-article-359736.html 一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...
- [深入学习Web安全](5)详解MySQL注射
[深入学习Web安全](5)详解MySQL注射 0x00 目录 0x00 目录 0x01 MySQL注射的简单介绍 0x02 对于information_schema库的研究 0x03 注射第一步—— ...
- Activiti工作流学习之流程图应用详解
Activiti工作流学习之流程图应用详解 1.目的 了解Activiti工作流是怎样应用流程图的. 2.环境准备2.1.相关软件及版本 jdk版本:Jdk1.7及以上 IDE:eclipse ...
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
随机推荐
- lsb_release 提示命令不存在
1. 报错信息 bash: lsb_release: command not found 2. 问题原因 未安装 lsb_release 命令 3. 解决方法 用 yum 命令安装 lsb_relea ...
- Android(java)学习笔记164:Relativelayout相对布局案例
我们看看案例代码,自己心领神会: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout ...
- Mysql+keeplived+lvs
最近要做个高可用的mysql.用mysql主主复制方式保证两台数据库的数据一致.结合lvs和keepalived一起使用(keepalived+lvs的设置会再另外一篇文章里写). 搭好环境之后,本人 ...
- LUN 和 LVM 知识
LUN是对存储设备而言的,volume是对主机而言的. lun是指硬件层分出的逻辑盘,如raid卡可以将做好的400G的raid5再分成若干个逻辑盘,以便于使用,每一个逻辑盘对应一个lun号,OS层仍 ...
- .net+easyui--combobox
一:预定义结构的 select 元素创建组合框(combobox)值固定写死 <select class="easyui-combobox" name="state ...
- bootstrap--组件之按钮式下拉菜单
把任意一个按钮放入 .btn-group 中,然后加入适当的菜单标签,就可以让按钮作为菜单的触发器了. 简单的实现如下 Code<div class="btn-group"& ...
- js事件模型
连接在此 http://www.cnblogs.com/zqstc/archive/2009/11/26/1611464.html
- jQuery 基础
慕课网 2016-01-07 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selector"&g ...
- js表格的输出
<html> <head> <title>隔行变色</title> <script type="text/javascript" ...
- Asp.Net MVC是否针对每次请求都重新创建一个控制器实例
一.Asp.Net MVC是否针对每次请求都重新创建一个控制器实例 默认情况下,答案是确定的. ControllerBuilder类 ControllerBuilder.Current用户获取默认的控 ...