转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992
我们可以使用view animation 动画系统来给View控件添加tween动画(下称“补间动画”),补间动画通过计算一些动画参数,比如说开始点,结束点,大小,旋转角度和一些其他的动画参数,来实现动画效果。
补间动画可以给View对象添加一系列简单的变换,比如位置,大小,角度或者是透明度。所以,如果你有一个TextView对象,你可以移动,旋转或者是变大。如果它有一个背景图片,背景图片也会随着text进行变化。
http://developer.android.com/reference/android/view/animation/package-summary.html 这个地址提供了补间动画需要的所有类。
一系列的动画指令被定义为补间动画,我们可以使用xml文件或者是纯代码进行定义。当我们想定义一个布局的时候,xml文件更加的方便,因为相对于硬编码,它可读性好、复用性强并且易于替换。所以,在下面的实例中,我们将使用xml的方式(想要了解更多的关于硬编码而不是xml方式的信息,请查阅AnimationSet类和Animation的子类)。
我们可以通过设置属性来决定我们想要动画什么时候发生,持续的时长等等。动画的变换可以是顺序发生的,也可以是同时发生的。比如,我们可以把一个TextView从左移动到右,然后旋转180度,或者是,我们可以让移动的动画和旋转动画同时发生。每一种动画变换都需要设置自己特有的属性集合(大小变化需要设置开始大小和结束大小,旋转变化需要设置开始角度和结束角度,其他的也类似),还需要设置一些共同的属性,比如开始时间和持续时间。如果我们想让很多变换一起发生,给他们设置相同的开始时间即可。如果想让变换顺序发生,我们只需要把开始时间设置成前面动画的持续总时间就可以了。
如果我们想通过xml文件创建动画,我们需要在工程的res目录下,创建一个anim文件夹,文件必须有且只有一个根元素,比如<alpha>,<scale>,<translate>,<rotate>,插值器元素,或者是一个<set>元素里面包含这些动画元素(也可以再包含一个set元素)。如果我们想让动画顺序发生,我们比如设置单独的startOffset属性,就像下面的例子。
下面的这个xml文件来自ApiDemo,用来伸缩然后同时旋转一个View对象。
<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>
屏幕的坐标系的(0,0)点在屏幕的左上角上面,向右为x正坐标,向下是y的正坐标。
一些值,比如说pivotX,可以指定与自身或者是父类相关。请确保你使用的格式是你想要的效果的正确格式,比如,50%是相对于自身的50%,但是50就不一样了。
我们也可以指定一个interpolator(插值器)来确定变换的时间如何变化,Android里面包含了几中插值器子类,每一种都有自己的加速度曲线,比如accelerateInterpolator,会告诉变换在开始的时候速度比较慢,然后开始加速。我们可以在xml里面设置相关的属性。
如果我们把上面的代码叫做hyperspace_jump.xml,那么我们使用下面的代码,给一个ImageView控件添加动画。
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
作为startAnimatinon()的一个可选的方式,我们可以使用Animation,setStartTime()设置开始时间,然后使用View,setAnimation()设置动画
如果想了解更多XML用法和可选的tag的属性,请查看Animation Resources。
Note:
不管你的动画是移动还是放缩,设置了动画的View控件的边界都不会自动调整去适应,即使如此,动画依然会被绘制出来,及时超出了边界也不会被切割。然而,如果动画超出了父View的范围,那超出部分就会被切割。
原文地址:http://developer.android.com/guide/topics/graphics/view-animation.html