利用Matrix对图片进行变换以及实现动画方法浅谈
2016-09-27 23:11
363 查看
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.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产生动画。
相关文章推荐
- Android利用Matrix实现图片的放大,缩小以及移动控制
- 利用ASM进行方法拦截中获取相关数据的实现
- Flex 中利用Matrix 类的rotate函数对图片进行旋转操作的例子
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)!
- CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)!
- 附录2 利用Visual C++调用图片实现平面动画
- 利用图形页实现动画的方法
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)!
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! .
- js实现图片放大缩小功能后进行复杂排序的方法
- FCKeditor 利用javascript插入图片以及统计当前输入字数方法
- 浅谈如何利用PB实现图片透明叠加(改编)
- flash中利用Loader.loadBytes方法和URLStream类实现图片的逐步加载
- 利用Lambda表达式、扩展方法以及泛型来实现一个另类的AOP
- 使用Matrix进行图形变换来完成图片在屏幕上的全屏显示(屏幕自适应)
- 【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! .
- 浅谈如何利用PB实现图片透明叠加(改编)
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- Android 利用httpclient进行网络通信,实现用户登录的方法