android学习7——canvas.concat(Matrix matrix)作用
canvas.concat的作用可以理解成对matrix的变换应用到canvas上的所有对象.
看下面的代码.
public class ConcatMatrixActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new ConcatMatrixView(this));
}
}
public class ConcatMatrixView extends View {
private Matrix matrix = new Matrix();
private Paint bgPaint = new Paint();
public ConcatMatrixView(Context context) {
super(context);
matrix.setScale(2f, 2f);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bgPaint.setColor(Color.RED);
canvas.drawRect(0, 0, 100, 100, bgPaint);
canvas.save();
canvas.concat(matrix);
canvas.drawRect(100, 100, 200, 200, bgPaint);
canvas.restore();
canvas.drawRect(400, 400, 500, 500, bgPaint);
}
}
以上代码对matrix的x和y坐标都拉伸了2倍.变化的效果如下所示:

在没有concat的情况下canvas.drawRect(100, 100, 200, 200, bgPaint);是在(100, 100), (200, 200)的区域下画一个矩形.因为执行了matrix.setScale(2f, 2f)所以matrix的x和y坐标都拉伸了2倍.这时候在concat的作用下canvas.drawRect(100, 100, 200, 200, bgPaint)变成了在(200, 200), (400, 400)的区域上画矩形.
同理,如果把对matrix的变换由matrix.setScale(2f, 2f)改成matrix.setTranslate(100f, 100f),效果如下所示:

x轴和y轴坐标都移动了100个像素.
android学习7——canvas.concat(Matrix matrix)作用的更多相关文章
- android学习6——canvas的save,restore作用
先看如下代码 public class SaveRestoreActivity extends Activity { @Override public void onCreate(Bundle sav ...
- Android学习笔记进阶八之Matrix矩阵
Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵.最好记住.如下图: ...
- Android学习笔记进阶九之Matrix对称变换
网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可. Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等. 1 关于Y轴对称 // 获取资源文件的引用res ...
- Android学习笔记进阶十之Matrix错切变换
刚开始我也不懂啥叫错切变换,一看效果图你就恍然大悟. 对图像的错切变换做个总结: x = x0 + b*y0; y = d*x0 + y0; 与之对应的方法是: Matrix matrix = new ...
- [Android学习笔记]Canvas的使用
Canvas文档 http://developer.android.com/training/index.html 在绘制view时候,重写onDraw(canvas)方法,可能需要在canvas上绘 ...
- 【android学习4】Eclipse中Clean作用
今天修改Servlet中代码,重启服务端程序之后发现没有启作用,于是Clean了一把,果然生效. 查阅资料得知,Eclipse中是根据时间戳去编译代码,如果某个类对应的时间戳没有发生改变就不会重新编译 ...
- Android Paint、Canvas、Matrix使用讲解(一、Paint)
http://blog.csdn.net/tianjian4592/article/details/44336949 好了,前面主要讲了Animation,Animator 的使用,以及桌面火箭效果和 ...
- Android学习记录(9)—Android之Matrix的用法
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 首先介绍一下矩阵运算.加法和减法就不用说了,对应位相加就好.图像处理,主要用到的是乘法 .下面 ...
- Android Bitmap和Canvas学习笔记 [转]
原文:http://www.cnblogs.com/feisky/archive/2010/01/10/1643460.html 位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的. ...
随机推荐
- [Angular Tutorial] 12 -Event Handlers
在这一步中,您将会在电话细节页面添加一个可点击的电话图片转换器. ·电话细节页面展示了当前电话的一张大图片和几张相对较小的略图.如果我们能仅仅通过点击略图就能把大图片换成略图就好了.让我们看看用Ang ...
- JS 弹出层 定位至屏幕居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- UIButton 之 按下高亮
设置高亮 [btn setHighlighted:YES]; 设置按下时高亮 [btn setShowsTouchWhenHighlighted:YES];
- jpg图片在开发板上显示
文件IO项目: 在开发板屏幕上循环显示目录里的图片 a.按照一定的间隔循环显示目录里的bmp图片 b.实现手指滑动来显示目录里的图片(bmp,jpg)上一张,下一张 d1: 1.能操控屏幕(查询开发板 ...
- 使用滚动条(ActionBar)
活动条(ActionBar)是Android3.0的重要更新之一.ActionBar位于传统标题栏的位置,也就是显示屏幕的顶部.ActionBar可显示应用的图标和Activity标题——也就是前面应 ...
- pureMVC简单示例及其原理讲解四(Controller层)
本节将讲述pureMVC示例中的Controller层. Controller层有以下文件组成: AddUserCommand.as DeleteUserCommand.as ModelPrepCom ...
- EntityFramework Core解决并发详解
前言 对过年已经无感,不过还是有很多闲暇时间来学学东西,这一点是极好的,好了,本节我们来讲讲EntityFramewoek Core中的并发问题. 话题(EntityFramework Core并发) ...
- CODEFORCES 125E MST Company 巧用Kruskal算法
题意:给定一个带权边无向图,求最小生成树,且满足第一个节点的度为固定的k 无解则输出-1 数据规模: 节点数n和限制k<=5000 边数m<=10^5 时限8sec 思路: 首先时限比较宽 ...
- BOM数据基础 - Mobox物料编码管理及实现
1 企业现状 在企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也 ...
- HDU 2080 夹角有多大II
夹角有多大II Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...