android矩阵具体解释

Matrix。中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

在Android里面,Matrix由9个float值构成。是一个3*3的矩阵。

最好记住。例如以下图:

解释一下。上面的sinX和cosX。表示旋转角度的cos值和sin值,注意,旋转角度是按顺时针方向计算的。

translateX和translateY表示x和y的平移量。scale是缩放的比例,1是不变,2是表示缩放1/2,这样子。

在android.graphics.Matrix中有相应旋转的函数:

Matrix matrix = new Matrix();

matrix.setRotate(90);

在程序中输出矩阵:System.out.println("matrix:" + matrix.toString());

你会发现一样东西:

与上面的公式基本全然一样(android.graphics.Matrix採用的是浮点数。而我们採用的整数)。

  1. // 定义矩阵对象
  2. Matrix matrix = new Matrix();
  3. float[] values ={0.707f,-0.707f,0.0f,0.707f,0.707f,0.0f,0.0f,0.0f,1.0f};
  4. matrix.setValues(values);
  5. System.out.println("matrix:" + matrix.toString());
  6. //bmp.getWidth(), 500分别表示重绘后的位图宽高
  7. Bitmap dstbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), 500,
  8. matrix, true);
  9. // 在画布上绘制旋转后的位图
  10. //放在坐标为0,200的位置
  11. canvas.drawBitmap(dstbmp, 0, 200, null);

以下介绍几个基本函数的使用方法:

setRotate(float degrees) :直接使图片旋转一定的角度。负数为向左旋转,正数为向右旋转。

setTranslate(float dx, float dy) 使图片平移

setScale(float sx, float sy) 使图片缩放

setSkew(float kx, float ky) 使图片倾斜

setRotate(float degrees, float px, float py) 使图片以某一点为中心旋转

reset() 是矩阵变为单位矩阵,即图片保持不变

相应上述的全部函数,都有相应的preXX和postXX版本号,它们所相应的功能如上所述。

以下是一个简单的样例。

setRotate(30,a,b)的功能是将图片以(a,b)为中心向右旋转30°。

以下能够用preXX来完毕对应的功能:

matrix.setTranslate(a,b);

matrix.preRotate(30);

matrix.preTranslate(-a,-b);

从意义上来说能够理解为将图片平移(-a,-b),然后向右旋转30°,最后再将旋转后的图片平移(a,b)就可以完毕将图片以(a,b)向右旋转30°的功能。

时间: 2024-10-17 18:07:03

android矩阵具体解释的相关文章

android矩阵详解

Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵.最好记住.如下图: 解释一下,上面的sinX和cosX,表示旋转角度的cos值和sin值,注意,旋转角度是按顺时针方向计算的. translateX和translateY表示x和y的平移量.scale是缩放的比例,1是不变,2是表示缩放1/2,这样子. 在android.graphics.Matrix中有对应旋转的函

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

android动画具体解释四 创建动画

使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象.比方:ofInt(), ofFloat(), 或 ofObject().比如: ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration(1

android动画具体解释二 属性动画原理

property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值.要动画某个东西.你需指定对象的目标属性.比方位置,动画的持续时间.和改变的值的范围. 属性动画系统同意你指定下面动画属性: · Duration: 动画持续时间. 默认是300 ms. · Time interpolation: 你能够指定一个函数来定义怎样跟据当前的时间计算属性的值. ·

使用Ant打包Android应用具体解释——Ant使用解析

上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生成是一系列操作的结果,而Ant则是将这一系列操作流程化.提供出定制化的接口,以及可配置的參数供改动,而这些都是通过指定的构建文件来实现. 我们就从Ant的打包流程来理解Ant的一些基本使用方法. 当在命令行中运行ant.默认会去解析当前文件夹的build.xml作为构建文件.以下是个删除部分注视的版本号: &

Android slidingmenu详细解释 滑动的优化

Android slidingmenu 详细解释 性能优化 转载请注明:   http://blog.csdn.net/aaawqqq 简单介绍 SlidingMenu 是github 上Android开源项目  能用于高速集成 Android 側滑菜单效果 Slidingmenu 里面能够包括多种组件 fragment  viewpager  listview  等 下载地址: github    : https://github.com/jfeinstein10/SlidingMenu ac

Android Handler 具体解释

Android开发中常常使用Handler来实现"跨越线程(Activity)更新UI".本文将从源代码角度回答:为什么使用Handler可以跨线程更新UI?为什么跨线程更新UI一定要用Handler? Demo Demo1. 用Handler更新UI 以下这个Demo全然是为了演示"跨线程更新UI"而写的. 界面上仅仅有一个TextView和一个Button.按下Button创建一个后台线程.该后台线程每隔一秒更新一次TextView.连续更新10次.结束. Ac

Android图文具体解释属性动画

Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)開始.Android開始支持属性动画,本文主要解说怎样使用属性动画. 关于视图动画能够參见博文<Android四大视图动绘图文具体解释>. 概述 视图动画局限比較大.例如以下所述: 视图动画仅仅能使用在View上面. 视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异

使用Ant打包Android应用具体解释

计划写个完整的使用Ant打包Android应用的系列文章.三篇文章.首篇具体介绍採用Ant打包Android应用的流程.列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使用,最后一篇描写叙述apk包的生成过程. 实现的环境: 操作系统:ubuntu 64bit 14.04 Android SDK Build Tools:22.0.1 Android SDK Tools:24.3.3 Ant:1.9.4 ProGuard:5.2.1 JDK:1.7 一.简单应用出包流