码迷,mamicode.com
首页 > 移动开发 > 详细

Android--Matrix(一)

时间:2015-10-04 14:44:53      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

Matrix

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

在Android中,scale(缩放),rotation(旋转)和 translation(平移)都是以矩阵(Matrix)的形式定义的,实际上在图形学中,这些平面图形的变换都是以矩阵的形式存在的。

技术分享

左边一行,会用到右面的两列。

在 Android 里面, Matrix 由 9 个 float 值构成,是一个 3*3 的矩阵。如下图。

       技术分享

解释一下,上面的 sinX 和 cosX ,表示旋转角度的 cos 值和 sin 值,注意,旋转角度是按顺时针方向计算的。

translateX 和 translateY 表示 x 和 y 的平移量。 

scale 是缩放的比例, 1 是不变, 2 是表示缩放 1/2,这样子。

public class MyView extends View {
    private Bitmap mBitmap;
    private Matrix mMatrix = new Matrix();
    public MyView(Context context) {
        super(context);
        initialize();
    }
    private void initialize() {        
        mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();        
        float cosValue = (float) Math.cos(-Math.PI/6);
        float sinValue = (float) Math.sin(-Math.PI/6);
        mMatrix.setValues(
                new float[]{
                        cosValue, -sinValue, 100,
                        sinValue, cosValue, 100,
                        0, 0, 2});
    }
    @Override protected void onDraw(Canvas canvas) {
//        super.onDraw(canvas);  //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
        canvas.drawBitmap(mBitmap, mMatrix, null);
    }
}

 

技术分享

以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码里面写的是100,为什么是平移50呢,因为缩放了一半。

大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。

这里讲的直接赋值的方式也许有点不好理解,不过还好, andrid 提供了对矩阵的更方便的方法,下一篇介绍 。

 

Android--Matrix(一)

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4854511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!