利用Matrix对图片进行变换以及实现动画方法浅谈

Android的Animations动画效果归根结底是利用cavas根据matrix对bitmap进行绘制,不同的matrix可让bitmap进行不同的显示,变换方式有平移、旋转、伸缩、扭曲这四种,本文说一下比较常用的前三种。

平移变换:调用Matrix.postTranlate(float dx, float dy)

该方法返回一个新的Matrix,调用canvas.drawBitmap(bitmap,matrix,null)之后可以让bitmap相对于画布原点横向移动x个像素,纵向移动y个像素,方向根据画布的坐标系有关,因为画布也可能进行过变换(canvas也可以进行translate、scale、rotate变换),画布没有进行过变换的情况下,x为正时向屏幕右方移动,为负则向屏幕左方移动,y为正时向屏幕下方移动,为负时向屏幕上方移动。

旋转变换:调用Matrix.postRotate(float degrees, float px, float py);

该方法返回一个新的Matrix,调用canvas.drawBitmap(bitmap,matrix,null)之后可以让bitmap围绕点(px,py)旋转degree度,点(px,py)是相对于canvas的坐标系而言的,而不是相对于bitmap本身,具体旋转方向仍然跟画布的坐标系有关,以画布未进行过变换为例,degree为正时顺时针旋转,为负时逆时针旋转。

伸缩变化:调用Matrix. postScale(float sx, float sy);

该方法返回一个新的Matrix,调用canvas.drawBitmap(bitmap,matrix,null)之后可以让bitmap在横向上和纵向上有一定比例的缩小或者变大,sx和sy就分别是横向和纵向的伸缩比例。

 

上述 三种方法只调用一次显示效果是静态的,为了实现动画效果,我们只需要不断地改变matrix,然后进行绘图,绘图方法canvas.drawbitmap的调用当然是在盛装bitmap的控件(如ImageView或者TextView)的onDraw方法里,就可以了。在这里介绍两种利用matrix进行自定义动画的方法:

1、重写控件onTouchEvent方法,然后检测手势移动的距离,根据移动的距离和方向为matrix设置不同的值,让bitmap产生动画

2、自定义一个Animation,重写其applyTranslation方法,在Animation的duration内该方法会不断调用,所以可在applyTranslation可以不断地改变matrix的值,近而让bitmap产生动画。

你可能感兴趣的:(利用Matrix对图片进行变换以及实现动画方法浅谈)