简单介绍Matrix的图形特效
来源:互联网 发布:净网行动知乎 编辑:程序博客网 时间:2024/06/09 17:48
Matrix在android的API中,对该工具类的说明很简单:是拥有3*3的坐标变换矩阵。
对于数学的原理说明的话,这里就不说了,有兴趣的童鞋可以参考下下面这篇文章。
Matrix的数学原理
Matrix本身不提供对图片或者组件进行变换的,你可以把它看作为一个对图片或者组件做某种变换的系数。它的特效方法有4种,分别为:平移,旋转,缩放和倾斜变换。
1.当然它是不提供渐变的效果的,也没有变速器之类的东西,它是作为一个辅助工具类来使用的,比如在Bitmap.createBitmap
()中,添加对图像的特效,这也是最为常用的使用方式,及自定义组件的时候画布上绘制图片的时候调用 canvas.drawBitmap()中。
2.每种变换都有3中操作方式,分为:pre ,post和set。
set是只能设置一个变换,每次设置会将前面的set替掉。如:
matrix.setRotate(90);matrix.setRotate(80);图片表现的只是80度的旋转,而不是从90度然后旋转到80度。
post:后乘。相对set来讲,它可以添加多个变换,顺序执行。
pre:前乘。操作会在矩阵的前面执行,比如:
matrix.setRotate(20);matrix.preTranslate(20, 100);
说是移动会在前面执行(当然,目测看不出来区别的,两个效果是有的)。
一般常使用的方式:
1.直接添加对bitmap的变换,然后交给图像。
Bitmap bitmap;ImageView img;Matrix matrix = new Matrix();@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.acy_matrix);img = (ImageView) findViewById(R.id.imageView_matrix);matrixVary(90);bitmap = picParams();img.setImageBitmap(bitmap);}/** * 变换效果 */public void matrixVary(float degrees) {matrix.setScale(20, 20);}/** * 控制位置和大小 */public Bitmap picParams() {Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),bitmap.getHeight(), matrix, true);return bitmap;}
这种方式,对平移是没有效果的,其他的效果可以。
2.自定义View绘制图像:
public class TestMatrix extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.acy_matrix);MyImg myImg = new MyImg(this);addContentView(myImg, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));}class MyImg extends View {Bitmap bit;Matrix matrix = new Matrix();;public MyImg(Context context) {super(context);// TODO Auto-generated constructor stubbit = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);matrix.postRotate(20);matrix.postTranslate(20, 100);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawBitmap(bit, matrix, null);}}}
结果:
注意:
1.Matrix这个工具类,相同的名字对应着两个不同的工具。一个是3*3的二维图形变换,导入的包是android.graphics.Matrix,一个是4*4的的三维图形变换,导入的包是android.opengl.Matrix。虽然特效都差不多,但三维的方法后面几乎都会带大写的“M”,参数列表也不同,三维的多了对于z的操作,还是很好区别是否导错包的。
- 简单介绍Matrix的图形特效
- 简单介绍Matrix的图形特效
- android 图形特效处理 Matrix控制变换
- Android 图形处理特效 Matrix 的set 、 pre、post方法的区别和使用
- Qt 图形特效(Graphics Effect)介绍
- Qt 图形特效(Graphics Effect)介绍
- Qt 图形特效(Graphics Effect)介绍
- python图形库pychartdir的简单介绍和安装步骤
- 3D图形及OpenGL的简单介绍
- 简单的窗体特效
- jQuery的简单特效
- Vision引擎中特效 - 粒子系统图形介绍
- ZenGL图形引擎的简单介绍以及和HGE图形引擎的对比
- 用VB实现“百叶窗”的图形特效
- 用VB实现“百叶窗”的图形特效
- 图形转换矩阵(Transform)特效的使用
- 使用Matrix控制图形、组件的变换
- 浅谈android中图片处理之图形变换特效Matrix(四)
- CoreData
- 扩展Web应用程序(上)
- 登录按钮与取消为什么会不一样?
- 无题
- sudo使用及日志添加
- 简单介绍Matrix的图形特效
- fatal error: file '/Applications/Xcode5-DP.app/Contents/Developer/Platforms/iPhoneSimulator...
- 黑马程序员_Java基础_IO流_打印流,合并流,分割文件,对象持久化,管道流...其他常用流
- 传统手工盘点与盘点机盘点方案对比,盘点机的用途,盘点机的价值,汉码科技实时盘点方案
- Hibernate注解方式一对多自关联关系映射
- uvaoj 673 Parentheses Balance
- Leetcode:Reverse Linked List II 单链表区间范围内逆置
- java android 最全的电话号码检测
- 程序员永远的痛之字符编码的奥秘