<转>android API Matrix类

M atrix类持有一个3*3的坐标变换矩阵。它没有自己的构造器,因此必须被初始化,
通过实现reset()方法或者set..()方法来实现,
如 setTranslate, setRotate, etc.

public void reset()——重设矩阵
//平移
public void setTranslate(float dx, float dy)——设置矩阵平移(dx, dy)
//缩放
public void setScale(float sx, float sy)——设置矩阵缩放(sx,sy)
public void setScale(float sx, float sy, float px, float py)——设置矩阵以(px,py)坐标点为中心进行缩放(sx,sy)
//旋转
public void setRotate(float degrees)——设置矩阵以原点为中心旋转degrees
public void setRotate(float degrees, float px, float py)——设置矩阵以坐标点(px,py)为中心旋转
// 倾斜
public void setSkew(float kx, float ky)——设置矩阵以原点为中心倾斜(kx,ky)
public void setSkew(float kx, float ky, float px, float py)——设置矩阵以坐标点(px,py)为中心倾斜

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

Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。
set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。

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

Java代码
  1. Matrix m = new Matrix();   
  2.   
  3. m.postRotate(30);   
  4.   
  5. m.postTranslate(100100);   
  6.   
  7. Matrix m = new Matrix();   
  8.   
  9. m.postRotate(30);   
  10.   
  11. m.postTranslate(100100);  

 

复制到剪贴板  Java代码
  1. package eoeandroid.demo;   
  2.   
  3. import android.content.Context;   
  4. import android.graphics.Bitmap;   
  5. import android.graphics.Canvas;   
  6. import android.graphics.Matrix;   
  7. import android.graphics.Rect;   
  8. import android.graphics.drawable.BitmapDrawable;   
  9. import android.util.DisplayMetrics;   
  10. import android.view.MotionEvent;   
  11. import android.view.View;   
  12.   
  13. public class MyView extends View {   
  14.   
  15. private Bitmap mBitmap;   
  16.   
  17. private Matrix mMatrix = new Matrix();   
  18.   
  19. public MyView(Context context) {   
  20.   
  21. super(context);   
  22.   
  23. initialize();   
  24.   
  25. }   
  26.   
  27. private void initialize() {   
  28.   
  29. Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();   
  30.   
  31. mBitmap = bmp;   
  32.   
  33.   
  34.   
  35. mMatrix.setScale(100f/bmp.getWidth(), 100f/bmp.getHeight());   
  36.   
  37. //平移到(100,100)处   
  38.   
  39. mMatrix.postTranslate(100100);   
  40.   
  41. //倾斜x和y轴,以(100,100)为中心。   
  42.   
  43. mMatrix.postSkew(0.2f, 0.2f, 100100);   
  44.   
  45. }   
  46.   
  47. @Override    
  48. protected void onDraw(Canvas canvas) {   
  49.   
  50. // super.onDraw(canvas); //如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。   
  51.   
  52. canvas.drawBitmap(mBitmap, mMatrix, null);   
  53.   
  54. }   
  55.   

你可能感兴趣的:(<转>android API Matrix类)