您可以使用视图动画系统在视图上执行补间动画。 Tween动画使用诸如起点,终点,大小,旋转和动画的其他常见方面的信息计算动画。
补间动画可以对View对象的内容执行一系列简单的变换(位置,大小,旋转和透明度)。 所以,如果你有一个TextView
对象,你可以移动,旋转,增长或缩小文本。 如果它有一个背景图像,背景图像将与文本一起变换。 该animation package
提供了补间动画中使用的所有类。
动画指令序列定义由XML或Android代码定义的补间动画。 与定义布局一样,推荐使用XML文件,因为它比硬编码动画更易读,可重复使用和可交换。 在下面的示例中,我们使用XML。 (要了解更多关于在应用程序代码中定义的,而不是XML的动画,指AnimationSet
类和其他Animation
子类)。
动画指令定义要发生的转换,发生的时间以及应用时间。 转换可以是顺序或同时的 - 例如,您可以让TextView的内容从左到右移动,然后旋转180度,或者让文本同时移动和旋转。 每个变换都采用一组特定于该变换的参数(尺寸变化的开始尺寸和结束尺寸,旋转的起始角度和结束角度等),以及一组通用参数(例如开始时间和持续时间) 。 要使几个转换同时发生,给他们相同的开始时间; 以使它们顺序,计算开始时间加上先前变换的持续时间。
动画XML文件所属的res/anim/
你的Android项目的目录中。 该文件必须有一个根元素:这将是单个<alpha>
, <scale>
, <translate>
, <rotate>
,插元素或<set>
元素来装这些元素组(其中可能包括另一<set>
)。 默认情况下,所有动画指令都同时应用。 以使它们按顺序发生,必须指定startOffset属性,如下面的例子中
以下来自ApiDemos之一的XML用于拉伸,然后同时旋转和旋转一个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 / decelerationateinterpolator”>
<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),并且随着向下和向右移动而增加。
某些值(如pivotX)可以相对于对象本身或相对于父对象指定。 确保使用正确的格式(“50”表示相对于父表的50%,或“50%”表示相对于其自身的50%)。
你可以决定如何转换通过分配一个随时间施加Interpolator
。 Android包括指定不同的速度曲线插补几个子类:例如, AccelerateInterpolator
讲述了一个转变,开始缓慢加速。 每个都有一个可以在XML中应用的属性值。
有了这个XML保存为hyperspace_jump.xml
在res/anim/
项目的目录,下面的代码将引用它,并把它应用到一个ImageView
从布局对象。
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
作为一种替代startAnimation()
您可以定义一个开始时间与动画Animation.setStartTime()
然后将动画分配到与View View.setAnimation()
有关XML语法的详细信息,可标记和属性,看动画资源
。
注意:无论怎样你的动画可以移动或调整,保存你的动画不会自动调整以适应它的视图的边界。 即使如此,动画仍将被绘制超出其视图的边界,不会被剪裁。 然而,如果动画超过父视图的边界将发生削波。
网友评论