您的位置:首页 > 移动开发 > Android开发

第三部分:Android 应用程序接口指南---第四节:动画和图形---第二章 View动画与Drawable动画

2013-12-23 18:12 417 查看

第2章 View动画与Drawable动画

2.1 View动画

你可以使用View的动画系统,在View上执行的补间动画。补间动画进行,如起点,终点,大小,旋转,动画的其他普通法方面的计算。补间动画可以执行一系列简单的View对象的内容转换(位置,大小,旋转,透明度)。所以,如果你有一个TextView的对象,你可以移动,旋转,放大,或缩小文本。如果它有一个背景图片,背景图片将随着文字变形。animation这个包(package)中提供了所有用于补间动画类。定义补间动画所指定的序列可以通过XML或Android代码来定义。推荐使用XML文件来定义一个布局,因为它更具可读性,可重复使用,易修改。在下面的例子中,我们使用XML来定义动画。动画可以指定你想要发生的时间,持续时间,连续或同时播放等。例如,你有一个TextView从左至右移动,然后旋转180度,或者你有一个TextView从左至右移动,并同时旋转。

动画的XML文件定义在res/anim/文件夹下。该文件必须有一个根元素:<set>

从下面的XML的ApiDemos之一它是用于拉伸,然后同时缩放和旋转视图对象。如代码清单1-1所示:

<set android:shareInterpolator="false">

<scale

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromXScale="1.0"

android:toXScale="1.4"

android:fromYScale="1.0"

android:toYScale="0.6"

android:pivotX="50%"

android:pivotY="50%"

android:fillAfter="false"

android:duration="700" />

<set android:interpolator="@android:anim/decelerate_interpolator">

<scale

android:fromXScale="1.4"

android:toXScale="0.0"

android:fromYScale="0.6"

android:toYScale="0.0"

android:pivotX="50%"

android:pivotY="50%"

android:startOffset="700"

android:duration="400"

android:fillBefore="false" />

<rotate

android:fromDegrees="0"

android:toDegrees="-45"

android:toYScale="0.0"

android:pivotX="50%"

android:pivotY="50%"

android:startOffset="700"

android:duration="400" />

</set>

</set>


代码清单1-1

屏幕坐标(在这个例子中不使用)(0,0)在左上角,并增加向下和右侧。

一些值,如pivotX,可以指定对象本身或相对于父控件。你想要的东西一定要使用正确的格式(“50”为50%是有区别的, 50%表示相对对象本身)。

你可以决定如何随着时间的推移应用分配一个加速器(Interpolator)。Android包括几个加速器子类指定不同的速度曲线:例如,AccelerateInterpolator的讲述一个开始减缓和加快转型。每个人都有一个属性值,可以在XML应用。此XML保存在项目res/anim/目录下的hyperspace_jump.xml,下面的代码将引用它,并将其应用于从布局到ImageView的对象。如代码清单1-2所示:

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);

Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);

spaceshipImage.startAnimation(hyperspaceJumpAnimation);


代码清单1-2

2.2 Drawable动画

Drawable动画你可以理解为是帧动画,一般业内我们也叫它帧动画。它让你加载一个系列drawable资源来创建一个动画。就像翻书一样。AnimationDrawable类是帧动画的基础。其实帧动画使用起来很简单。你可以在XML文件中定义你想要的动画序列。如按照下面的格式即可,参考下面代码清单1-3所示:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">

<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />

<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />

<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />

</animation-list>


代码清单1-3

这个帧动画只有三帧。并且设置了oneshot=“true”,表示只执行一次,然后会停在最后一帧。当然你设置为false他就会循环运行了。一般我们放在res/anim/目录下,当然有些人也喜欢放在res/drawable/目录下,这都是可以的。这个XML文件会被当成View的background属性来播放。以下代码清单1-4就是一个例子:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);

rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

}

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

rocketAnimation.start();

return true;

}

return super.onTouchEvent(event);

}


代码清单1-4

请注意,动画的.start()方法放在onCreate()中是无效的。如果你想要程序自动后就立即播放,你可以考虑重写onWindowFocusChanged() 方法,并把rocketAnimation.start()放在其中即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐