《Android和PHP开发最佳实践》一2.9 Android动画效果

2.9 Android动画效果

适当地使用动画效果可以很好地提升Android应用或游戏的操作体验。目前Android系统支持的动画效果主要有两种,即逐帧动画(Frame Animation)和补间动画(Tween Animation)。虽然,在Android 3.0以后的版本中还引入了新的动画系统,但是目前最主流的动画效果还是这两种。

2.9.1 逐帧动画(Frame Animation)

逐帧动画类似于GIF动画图片,即按照顺序播放图片。我们通常会在Android项目的res/drawable/目录下面定义逐帧动画的XML模板文件。编码的时候,需要在动画模板文件的标签中依次放入需要播放的图片,并设置好播放的间隔时间,如代码清单2-34所示。
代码清单 2-34

<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/a001" android:duration="100"/>
    <item android:drawable="@drawable/a002" android:duration="100"/>
    <item android:drawable="@drawable/a003" android:duration="100"/>
    ...
</animation-list>

然后,就可以在Activity界面控制器的逻辑中自由使用了。需要注意的是,逐帧动画并不能独立使用,动画效果的显示还是要借助于ImageView图像控件,简单地说,也就是把动画效果绑定到对应的ImageView图片对象上。假设这里的ImageView元素的ID值,即android:id属性值为img_frame_anim,而之前定义的动画模板文件名为demo_frame_anim.xml,逐帧动画的使用范例如代码清单2-35所示。
代码清单 2-35

public class DemoAnimationActivity extends Activity {

    ImageView iv;
    AnimationDrawable ad;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 获取对应图片的ImageView对象
        iv = (ImageView) findViewById(R.id.img_frame_anim);
        // 设置对应图片的背景为动画模板文件
        iv.setBackgroundResource(R.drawable.demo_frame_anim);
        // 初始化动画对象
        ad = (AnimationDrawable) imageView.getBackground();
        // 开始动画
        ad.start();
    }

    public void onPause() {
        super.onPause();
        // 停止动画
        ad.stop();
    } 

    ...
}

以上代码的逻辑非常简单,我们可以重点关注AnimationDrawable对象的用法,即如何使用start和stop方法控制逐帧动画的播放和停止。

2.9.2 补间动画(Tween Animation)

补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。目前Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。
AlphaAnimation:透明度(alpha)渐变效果,对应标签。
TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应标签。
ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应标签。
RotateAnimation:旋转渐变,可以指定旋转的参考点,对应标签。
AnimationSet:组合渐变,支持组合多种渐变效果,对应标签。
补间动画的效果同样可以使用XML语言来定义,这些动画模板文件通常会被放在Android项目的res/anim/目录下。比如,代码清单2-36中就定义了一个组合式的渐变动画效果。
代码清单 2-36

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="1000" />
    <scale
        android:fromXScale="0.1"
        android:toXScale="1.0"
        android:fromYScale="0.1"
        android:toYScale="1.0"
        android:duration="1000"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="100" />
</set>

以上补间动画有两个效果:首先,在1秒(1000ms)的时间内,透明度从0(完全透明)变成1(不透明);同时,大小从原先的1/10变成正常大小,缩放的中心点是元素的中心位置。假设以上动画效果的模板文件名为demo_tween_anim.xml,现在我们要把该动画效果应用到一张ID为img_tween_anim的图片上,实现方法见代码清单2-37。
代码清单 2-37

...
ImageView iv = (ImageView) findViewById(R.id.img_tween_anim);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.demo_tween_anim);
iv.startAnimation(anim);
...

在实际项目中,我们经常使用补间动画,原因是补间动画使用起来比较方便,功能也比逐帧动画强大不少,而且还可以很方便地进行动画叠加,实现更加复杂的效果。实际上,代码清单2-36中的标签对应的就是AnimationSet类,即“动画集合”的概念,支持加入多种动画效果,如渐变动画(alpha)、大小动画(scale),线性动画(translate)等。另外,在Android系统中,所有与动画相关的类都归类在android.view.animation包之下,大家可以参考SDK文档进行进一步学习。
至此,我们已经初步了解了如何在Android系统中使用各种动画效果,包括逐帧动画和补间动画。显而易见的是,在Android平台之上,开发者们可以很方便地使用各种动画效果来为应用产品增色。此外,使用动画效果还可以帮助我们制作出简单的Android游戏,更多与Android游戏开发有关的内容请参考本书第13章。

时间: 2024-09-13 00:31:52

《Android和PHP开发最佳实践》一2.9 Android动画效果的相关文章

《Android和PHP开发最佳实践》一2.7 Android应用界面

2.7 Android应用界面 Android应用界面系统,即Android UI(User Interface)系统是Android应用框架最核心的内容之一,也是开发者们需要重点掌握的内容.如果我们把Android应用也分为前后端两部分的话,那么之前介绍的核心要点和四大组件等都属于后端,而Android UI系统则属于前端.后端保证应用的稳定运行,而前端则决定应用的外观和体验.对于一个优秀的Android应用来说,漂亮的外观和流畅的体验是必不可少的.接下来,我们便来学习Android外观系统的

《Android和PHP开发最佳实践》一2.10 Android开发环境

2.10 Android开发环境 前面我们已经学习了Android系统中最重要的基础概念的内容,那么接下来就要开始正式进入Android应用的实战开发阶段."工欲善其事,必先利其器",因此,我们先来熟悉Android应用的开发环境吧. Android应用的开发环境是基于Eclipse平台的,Eclipse的强大无需多说,它当然也适应于Windows XP.Mac OS.Linux等多种操作系统.另外,我们还需要安装一些必备的开发工具包,所需要的软件见表2-8. 2.10.1 开发环境的

《Android和PHP开发最佳实践》一2.4 Android系统四大组件

2.4 Android系统四大组件 之前我们已经学习了Android应用框架的四大核心要点,对Android的应用框架有了一个总体性的了解,接下来我们要学习Android应用程序中的四个重要组成部分,也就是我们一般所说的"应用组件".在前面讲解四大核心要点的篇幅中,我们曾经提到了控件(View控件)的概念,现在我们再来学习一下Android应用框架中的组件的概念.那么何谓组件呢?顾名思义,组件当然要比控件复杂,简而言之,组件是用于工业化组装的部件.要达到组件的标准,必须符合三个要求,以

《Android和PHP开发最佳实践》一1.3 如何学习Android和PHP

1.3 如何学习Android和PHP 前面我们已经讨论过"为何学"的问题,大家应该对Android加PHP这套应用开发解决方案有了大致的了解.接下来介绍"如何学"的问题,由于本书的内容比较广泛,既涉及客户端开发的技术也包含很多服务端开发的内容,所以在正式开始学习本书之前,先搞清楚应该使用什么样的学习方法比较有效是非常有必要的.接下来,笔者会把这个问题分解为以下几个部分来探讨. 1.3.1 如何学习Android 由于Android学习是本书最核心的内容,因此我们先

《Android和PHP开发最佳实践》一2.3 Android应用框架

2.3 Android应用框架 前面介绍了Android的系统框架,主要目的是让大家对Android系统有整体的概念,也为日后更深入的学习打好基础.然而,目前我们更需要重点学习和掌握的则是Android的应用框架,因为是否能掌握和理解Android应用框架,直接关系到是否能学好Android应用开发. Android的应用框架是一个庞大的体系,想要理解透彻并不是那么简单的事情,但是,好在其中有一些比较清晰的脉络可以帮助我们快速地熟悉这个系统,因此抓住这些脉络中的核心要点对于能否学好Android

《Android和PHP开发最佳实践 》一导读

前 言 2012年,移动互联网革命正在如火如荼地进行,一个充满机遇的巨大市场正在开启,无论是创业者还是从业者都需要做好准备.Android和PHP两种技术,作为目前移动领域和互联网领域中的热门技术,已经受到广大开发者们的关注. 本书是目前市面上唯一一本同时讲述Android客户端开发和PHP服务端开发两方面内容,并且把Android移动互联网应用开发的完整解决方案分析透彻的书籍.通过本书,您不仅可以学习到Android客户端开发技巧,而且可以掌握PHP服务端开发的精华,甚至还可以开拓软件架构的思

《Android和PHP开发最佳实践》一2.1 Android背景知识

2.1 Android背景知识 Android是一种基于Linux平台的.开源的.智能移动终端的操作系统,主要使用于便携设备,Android操作系统最初由Andy Rubin开发,主要支持手机设备.2005年由Google收购注资,并召集多家制造商组成"开放手机联盟"对其进行开发改良,并逐渐扩展到平板电脑及其他领域,近年来逐渐成为主流的移动终端操作系统之一. Android平台的研发队伍十分强大,包括Google.HTC.T-Mobile.高通.摩托罗拉.三星.LG以及中国移动在内的3

《Android和PHP开发最佳实践》一1.1 移动互联网时代的来临

1.1 移动互联网时代的来临 2011年,Android操作系统就已经占领了全球智能手机市场份额的半壁江山,霸主的地位彰显无遗(如图1-1所示).在国内,随着各大手机厂商的更新换代,Android操作系统的占有率也在火速上升中:中国移动公司已经早早推出了自己基于Android的OMS系统和OPhone,甚至连各大互联网巨头也在纷纷推出自己基于Android的手机产品.据统计,2012年内全球智能手机市场增长率达到49%,中国移动互联网用户量已经突破4亿,手机用户量也已经超越了PC. 看到这里,相

《Android和PHP开发最佳实践》一第1章 学 前 必 读

第1章 学 前 必 读 在学习任何知识之前,做好准备工作是非常有必要的.在本章,我们先来了解一下目前正如火如荼的移动互联网时代的大背景,然后我们会讲清楚我们为何要学习Android和PHP这套组合方案,以及学习Android和PHP开发的大体思路和学习方法.相信大家读完本章以后,不仅会对Android和PHP这个强大的组合更感兴趣,而且之后的学习之路会更加顺畅.