原文地址:http://chroya.iteye.com/

Android里面提供了对Matrix操作的一系

列方便的接口。


Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在

Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。


set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。


post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋
转30度,然后平移到(100,100)的地方,那么可以这样做:

Java代码
  1. Matrixm=newMatrix();
  2. m.postRotate(30);
  3. m.postTranslate(100,100);
Matrix m = new Matrix();m.postRotate(30);m.postTranslate(100, 100);  

这样就达到了想要的效果。


pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。例如上面的例子,如果用pre的话

,就要这样:

Java代码
  1. Matrixm=newMatrix();
  2. m.setTranslate(100,100);
  3. m.preRotate(30);
Matrix m = new Matrix();m.setTranslate(100, 100);m.preRotate(30);

旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。


下面给出一个例子。

Java代码
  1. packagechroya.demo.graphics;
  2. importandroid.content.Context;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.Canvas;
  5. importandroid.graphics.Matrix;
  6. importandroid.graphics.Rect;
  7. importandroid.graphics.drawable.BitmapDrawable;
  8. importandroid.util.DisplayMetrics;
  9. importandroid.view.MotionEvent;
  10. importandroid.view.View;
  11. publicclassMyViewextendsView{
  12. privateBitmapmBitmap;
  13. privateMatrixmMatrix=newMatrix();
  14. publicMyView(Contextcontext){
  15. super(context);
  16. initialize();
  17. }
  18. privatevoidinitialize(){
  19. Bitmapbmp=((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
  20. mBitmap=bmp;
  21. /*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/
  22. bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。*/
  23. mMatrix.setScale(100f/bmp.getWidth(),100f/bmp.getHeight());
  24. //平移到(100,100)处
  25. mMatrix.postTranslate(100,100);
  26. //倾斜x和y轴,以(100,100)为中心。
  27. mMatrix.postSkew(0.2f,0.2f,100,100);
  28. }
  29. @OverrideprotectedvoidonDraw(Canvascanvas){
  30. //super.onDraw(canvas);//如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
  31. canvas.drawBitmap(mBitmap,mMatrix,null);
  32. }
  33. }
package chroya.demo.graphics;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;public class MyView extends View {private Bitmap mBitmap;private Matrix mMatrix = new Matrix();public MyView(Context context) {super(context);initialize();}private void initialize() {Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();mBitmap = bmp;/*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。*/mMatrix.setScale(100f/bmp.getWidth(), 100f/bmp.getHeight());                //平移到(100,100)处mMatrix.postTranslate(100, 100);                //倾斜x和y轴,以(100,100)为中心。mMatrix.postSkew(0.2f, 0.2f, 100, 100);}@Override protected void onDraw(Canvas canvas) {//super.onDraw(canvas);  //如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。canvas.drawBitmap(mBitmap, mMatrix, null);}}

运行效果如下:

红色的x和y表示倾斜的角度,下面是x,上面是y。看到了没,Matrix就这么简单

更多相关文章

  1. android 物理按键
  2. Android(安卓)Matrix矩阵详解
  3. Android(安卓)Demos 示例BitmapMesh中部分方法的理解
  4. android 之绘图
  5. Android(安卓)postTranslate和preTranslate的理解
  6. android 之绘图
  7. android camera 画角度图
  8. Android中图像变换Matrix的原理、代码验证和应用
  9. Android开发学习之Animation之Android帧动画解析

随机推荐

  1. 读取XML文件时报“前言中不允许有内容”
  2. 教你如何正确使用XML
  3. 详解JSTL读取xml中文乱码解决的案例
  4. 详细介绍xml的语法的使用和学习
  5. 简单介绍OFBiz使用xml配置界面的想法
  6. xml的属性总结代码详情
  7. XML文件要有根标签(错误)的代码解决分享
  8. 详解xml文档正确格式的示例代码
  9. 具体介绍如何在IE中创建DOM并载入XML的详
  10. 详细介绍XML与浏览器