android矩阵,Android矩阵应用后如何回到原坐标

Android中的Matrix,以及set,pre和post的区别

Matrix包含一个3 X 3的矩阵,专门用于图像变换匹配。

创新互联专注于林甸企业网站建设,响应式网站建设,购物商城网站建设。林甸网站建设公司,为林甸等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

Matrix提供了四种操作:

translate(平移)

rotate(旋转)

scale(缩放)

skew(倾斜)

也就是说这4种操作都是对这个3 X 3的矩阵设值来达到变换的效果。

Matrix没有结构体,它必须被初始化,通过reset或set方法。

OK,Matrix介绍完了,我们来看看set、pre、post的区别。

pre是在队列最前面插入,post是在队列最后面追加,而set先清空队列在添加(这也是上文提到的“Matrix没有结构体,它必须被初始化,通过reset或set方法”的原因)。

下面通过一些例子具体说明:

matrix.preScale(2f,1f);

matrix.preTranslate(5f, 0f);

matrix.postScale(0.2f, 1f);

matrix.postTranslate(0.5f, 0f);

执行顺序:translate(5, 0) - scale(2f, 1f) - scale(0.2f, 1f) - translate(0.5f, 0f)

matrix.postTranslate(2f, 0f);

matrix.preScale(0.2f, 1f);

matrix.setScale(1f, 1f);

matrix.postScale(5f, 1f);

matrix.preTranslate(0.5f, 0f);

执行顺序:translate(0.5f, 0f) - scale(1f, 1f) - scale(5f, 1)

求教,如何在Android中将图片转化为矩阵

Android本身的android.graphics.Bitmap实现

一般在Android使用图片,都会用到这个类,这个类中有一个函数:

getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)

Returns in pixels[] a copy of the data in the bitmap.

功能和你要求的类似,只不过返回的是一位数组,转成二维数组应该不是问题吧。

使用是需注意,对于比较大的图片,你的操作很可能会比较占用内存,需要处理一下out of memory的exception。

[img]

Android自定义控件之可平移、缩放、旋转图片控件

先上效果图

源码

单点拖动图片对图片进行平移操作。双手缩放图片大小和旋转图片到一定的角度。图片缩放的时候 不能大于最大的缩放因子和小于最小的缩放因子。大于最大缩放因子或者小于最小缩放因子需要对图像进行回弹。图片旋转的角度只能为90度的倍数,不满足90度要进行回弹。图片回弹要一个渐变的效果。

大体思路: 首先,Android中提供了Matrix类可以对图像进行处理。其次,要显示一张图片最容易想到的就是ImageView。回弹要求渐变的过程,可以通过属性动画进行设置。所以大体的思路是:继承ImageView,重写onTouchEvent()方法,判断事件类型,在对应的事件使用Matrix对图像进行变换。

Matrix是一个已经封装好的矩阵,最重要的作用就是对坐标点进行变换。

举个栗子:

1.某个点(x0,y0,1)通过单位矩阵E映射得到的点还是(x0,y0,1)。

3.点(x0,y0,1)通过矩阵T映射得到的点就会做如下的变换

可以看到点(x0,y0,1)经过T矩阵在x轴方向上平移了dx,在y轴方向上平移了dy。

通过以上的变换可以得到具体的思路: 我们维护一个图像对应的矩阵mCurrentMatrix,该矩阵主要是对ImageView中的图像的各个点进行映射。ImageView在容器位置摆放完成之后,置mCurrentMatrix矩阵为单位矩阵。当onTouchEvent()方法中触发单点触控并且手指进行平移的时候,调用矩阵mCurrentMatrix的postTranslate(dx,dy),对mCurrentMatrix进行变换。当手指抬起,利用变换结束后的矩阵对图像的各个点进行映射,从而得到平移变换后的图像。同理可得,在两只手指进行缩放旋转的时候,我们对矩阵mCurrentMatrix进行各种变换,当缩放旋转的事件结束再利用变换完的矩阵去映射图像的各个点,从而得到缩放、旋转后的图像。

安卓自定义View进阶 - Matrix原理

安卓自定义View进阶 - Matrix详解

首先理清事件的逻辑:

初始化图像大小和位置

缩放图像大小和控件大小自适应,平移图像中心和控件中心重合

onTouchEvent()函数

平移操作

将图像对应的矩阵进行变换。

缩放操作

mBoundRectF为记录图像边界的矩形。缩放的时候选取图像的中心进行缩放。

旋转操作

旋转的时候旋转的旋转中心也是图像的中心

图像中各个点的映射

调用ImageView的setImageMatrix(Matrix matrix)会让ImageView根据设置的matrix去重新绘制图像。

更新图像的矩形边界

获得图像的矩形,并根据矩阵映射矩形各个点的坐标。

缩放回弹

旋转回弹

一些计算方法

要求图像的变换是一个渐变的过程,很容易想到的就是属性动画。因为属性动画本身就是对值进行不断set的过程。而我们维护的矩阵也是一个值,所以很自然可以想到,如果得到回弹之前的矩阵的值以及回弹之后矩阵的值,就可以根据动画监听器中动画当前的系数值去改变矩阵的值。

对animator对象设置完监听器之后,就可以在手指抬起的时候调用属性动画的start()方法开启动画。

自定义可平移、缩放、旋转的控件主要点有两个方面:一是onTouchEvent()中判断平移、旋转、缩放的触发条件,平移位移量、缩放比例因子、旋转角度的计算。二是Matrix矩阵的应用。

JAVA android 矩阵 怎么设置坐标

1、设置图片位置坐标

matrix.postTranslate(x,y) ——这个(x,y)为图片左上角的位置

2、设置图片图片中心点为中心旋转

matrix.postRotate(角度, x, y);——这个(x,y)为图片中心点的位置

3、渲染图片

canvas.drawBitmap( BIT , matrix , new Paint());

android怎么布局按钮矩阵

Android 布局文件View控件的随机排列需要使用ListView控件或者GridView控件来实现,原理是利用Adapter随机数据源来实现的。

使用自定义Adapter绑定数据。

使用集合随机

Collections.shuffle(list); adapter.setData(list);,并设置将数据绑定到适配器中。

重新刷机列表 adapter.notifyDataSetChanged();

刷新控件列表后,即实现了随机的功能。


网页标题:android矩阵,Android矩阵应用后如何回到原坐标
本文网址:http://myzitong.com/article/dsopgpd.html