zoukankan      html  css  js  c++  java
  • Android画图之Matrix(二)

    上一篇Android画图之Matrix(一) 讲了一下Matrix的原理和运算方法,涉及到高等数学,有点难以理解。还好Android里面提供了对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);    

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


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

    ,就要这样:

    Java代码  收藏代码
    1. Matrix m = new Matrix();  
    2.   
    3. m.setTranslate(100100);  
    4.   
    5. m.preRotate(30);  

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


        下面给出一个例子。

    Java代码  收藏代码
    1. package chroya.demo.graphics;  
    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.     private Matrix mMatrix = new Matrix();  
    17.       
    18.     public MyView(Context context) {  
    19.         super(context);  
    20.         initialize();  
    21.     }  
    22.   
    23.     private void initialize() {  
    24.           
    25.         Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();  
    26.         mBitmap = bmp;  
    27.         /*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/ 
    28. bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。*/  
    29.         mMatrix.setScale(100f/bmp.getWidth(), 100f/bmp.getHeight());  
    30.                 //平移到(100,100)处  
    31.         mMatrix.postTranslate(100100);  
    32.                 //倾斜x和y轴,以(100,100)为中心。  
    33.         mMatrix.postSkew(0.2f, 0.2f, 100100);  
    34.     }  
    35.       
    36.     @Override protected void onDraw(Canvas canvas) {  
    37. //      super.onDraw(canvas);  //如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。  
    38.           
    39.         canvas.drawBitmap(mBitmap, mMatrix, null);  
    40.     }  
    41. }  

     运行效果如下:

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

  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2624820.html
Copyright © 2011-2022 走看看