上一篇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)的地方,那么可以这样做:
Matrix m = new Matrix();m.postRotate(30);m.postTranslate(100, 100);

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

pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。例如上面的例子,如果用pre的话,就要这样:
Matrix m = new Matrix();m.setTranslate(100, 100);m.preRotate(30);

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

下面给出一个例子。
package com.iaiai.activity;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.View;public class IaiaiActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(new MyView(this));}public class MyView extends View {private Bitmap bmp;private Matrix matrix = new Matrix();public MyView(Context context) {super(context);initialize();}private void initialize() {bmp = ((BitmapDrawable) getResources().getDrawable(R.drawable.icon)).getBitmap();// 首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。matrix.setScale(100f / bmp.getWidth(), 100f / bmp.getHeight());// 平移到(100,100)处matrix.postTranslate(100, 100);// 倾斜x和y轴,以(100,100)为中心。matrix.postSkew(0.2f, 0.2f, 100, 100);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(bmp, matrix, null);}}}


运行结果:


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

更多相关文章

  1. Android绘图机制与处理技巧-更新中
  2. Android(安卓)获取View高度宽度
  3. Android(安卓)OpenGL例子学习
  4. Android(安卓)获取View高度宽度
  5. Android(安卓)-- 图像处理(信息量超大)
  6. Android(安卓)Matrix详解
  7. Android画图之Matrix(二)
  8. Android(安卓)利用Matrix实现图片随手指平移、旋转、缩放
  9. Android画图之Matrix(二)

随机推荐

  1. android 自带的下拉刷新控件,含Demo(SwipeR
  2. Android
  3. android中gridView中点击 item为选中状态
  4. Android打电话,挂电话
  5. android 用Pull 读取XML
  6. Android(安卓)Intent用法详解
  7. Android播放ogg声音文件
  8. Android(安卓)高亮指示层提示
  9. Android(安卓)反射获取私有方法,成员变量
  10. Android(安卓)图表--MPAndroidChart