- 1、本文档共72页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android中的图形图像处理
* * P34 掌握了Canvas绘图之后,如果需要实现游戏动画也是非常简单的。动画其实就是不断地重复调用View组件的onDraw(Canvas canvas)方法,如果每次在View组件上绘制的图形并不相同,就成了习惯上所说的动画。 为了让View组件上绘制的图形发生改变(无非是位置、大小、角度等发生改变),这就需要程序采用变量来记住这些状态数据—如果需要游戏动画随用户操作而改变,就为用户动作编写事件监听器,在监听器汇总修改这些数据;如果需要游戏动画“自动”改变,那就是随时间的流失而改变,就需要使用定时器,让Timer控制这些状态数据定期修改。 本实例实现一个画图板,当用户在触摸屏上移动时,即可在屏幕上绘制任意的图形。 实现手绘功能其实是一种假象:表面上看起来可以随用户在触摸屏上自由地画曲线,实际上依然利用的Canvas的drawLine方法画直线,每条直线都是从上一次拖动事件发生点画到本次拖动事件发生点。当用户在触摸屏上移动时,两次拖动事件发生的距离很小,多条极短的直线连接起来,肉眼看起来就是直线了。借助于Android提供的Path类,可以非常方便地实现这种效果。 需要指出的是,如果程序每次都只是从上次拖动事件的发生点绘制一条直线到本次拖动事件的发生点,那么用户前面绘制的就会丢失。为了保留用户之前绘制的内容,程序需要借助于双缓冲技术。 所谓双缓冲技术其实很简单:当程序需要在指定View上进行绘制时,程序并不直接绘制到该View组件上,而是先绘制到一个内存中Bitmap图片(这就是双缓冲)上,等到内存中的Bitmap绘制好之后,在一次性地将 Bitmap绘制到View组件上。 动画资源文件介绍: /res/anim/****.xml:资源文件中使用animation-list…/元素中使用item…/子元素定义动画的全部帧,并指定各帧的持续时间。 ?xml version=1.0 encoding=utf-8? !-- 指定动画循环播放 -- animation-list xmlns:android=/apk/res/android android:oneshot=false !-- 添加多个帧 -- item android:drawable=@drawable/fat_po_f01 android:duration=60 / item android:drawable=@drawable/fat_po_f02 android:duration=60 / item android:drawable=@drawable/fat_po_f03 android:duration=60 / /animation-list 使用ImageView 显示动画: ImageView android:id=@+id/anim android:layout_width=wrap_content android:layout_height=wrap_content android:background=@anim/fat_po android:scaleType=center / 使用AnimationDrawable控制动画播放和停止: final AnimationDrawable anim = (AnimationDrawable)imageView.getBackground(); anim.start(); anim.stop(); 项目实例1演示 FatPo 项目实例2演示:爆炸场景 Blast 代码分析 开发者只需要指定动画开始、动画结束“关键帧”,而动画变化的“中间帧”由系统计算、并补齐,这也就是把 “Tween”翻译成“补间动画”的原因 具体来说,预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。这些指令可以是XML文件定义,也可以以源代码方式定义。程序沿着时间执行这些指令就可以实现动画。 Tween动画定义的开始帧、结束帧其实只是一些简单的变化,比如图形大小的缩放、旋转角度的改变等。Android使用Animation代表抽象的动画类,它包括如下几个子类: AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 为了控制在动画期间需要动态“补入”多少帧,具体在动画运行的哪些时刻补入帧、需要借助Interpolator(数学中的插值) Interpolator根据特定算法计算出整个动画需要动态插入帧的密度和位置,简单地说,Interpolator负责控制动画的变化速度,这就使得基本的动画效果(Alpha、Sc
文档评论(0)