动画和图形:视图动画

您可以使用视图动画系统在视图上执行补间动画。 Tween动画使用诸如动画的起始点,终点,大小,旋转以及其他常见方面的信息来计算动画。


补间动画可以对View对象的内容执行一系列简单的转换(位置,大小,旋转和透明度)。 所以,如果你有一个TextView对象,你可以移动,旋转,增长或收缩文本。 如果它有一个背景图像,背景图像将与文本一起变换。 动画包提供了补间动画中使用的所有类。


一系列动画指令定义了由XML或Android代码定义的补间动画。 与定义布局一样,建议使用XML文件,因为它比硬编码动画更可读,可重用和可交换。 在下面的例子中,我们使用XML。 (要了解有关在应用程序代码中定义动画的更多信息,而不是XML,请参阅AnimationSet类和其他Animation子类。)


动画指令定义您想要发生的转换,何时发生,以及应用所需的时间。 转换可以是顺序的或同时的 - 例如,您可以使TextView的内容从左到右移动,然后旋转180度,或者您可以同时移动文本并旋转。 每个变换都需要一组特定于该变换的参数(起始大小和大小变化的起始大小,起始角度和旋转结束角度等等)以及一组常用参数(例如开始时间和持续时间)。 要同时进行几次转换,给他们相同的开始时间; 要使它们连续,计算开始时间加上一次变换的持续时间。


动画XML文件属于您的Android项目的res / anim /目录。 该文件必须具有单个根元素:它将是包含这些元素的组的单个<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<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/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),并且向下和向右增加。


某些值(例如pivotX)可以相对于对象本身或相对于父对象指定。 一定要使用正确的格式,你想要的(“50”为50%相对于父元素,或“50%”为50%相对于自己)。


您可以通过分配Interpolator来确定随着时间的推移应用转换。 Android包括几个Interpolator子类,它们指定各种速度曲线:例如,AccelerateInterpolator指示转换开始慢速并加快速度。 每个都有一个可以在XML中应用的属性值。


将此XML保存为项目的res / anim /目录中的hyperspace_jump.xml,以下代码将引用它,并将其应用于布局中的ImageView对象。

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

作为startAnimation()的替代方法,您可以使用Animation.setStartTime()定义动画的开始时间,然后使用View.setAnimation()将动画分配给View。


有关XML语法,可用标签和属性的更多信息,请参阅动画资源。


注意:无论您的动画如何移动或调整大小,保存动画的视图的边界将不会自动调整以适应。 即使如此,动画仍将被绘制超出其视图的边界,不会被剪辑。 但是,如果动画超过父视图的边界,则会发生裁剪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值