? ? 转载请注明出处: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文件创建动画,我们须要在project的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