Matrix的操作

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. /*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/  
  34. bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。*/  
  35.   
  36. mMatrix.setScale(100f/bmp.getWidth(), 100f/bmp.getHeight());   
  37.   
  38. //平移到(100,100)处   
  39.   
  40. mMatrix.postTranslate(100100);   
  41.   
  42. //倾斜x和y轴,以(100,100)为中心。   
  43.   
  44. mMatrix.postSkew(0.2f, 0.2f, 100100);   
  45.   
  46. }   
  47.   
  48. @Override    
  49. protected void onDraw(Canvas canvas) {   
  50.   
  51. // super.onDraw(canvas); //如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。   
  52.   
  53. canvas.drawBitmap(mBitmap, mMatrix, null);   
  54.   
  55. }   
  56.   
  57. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值