视图动画

你可以使用视图动画系统来为View设置渐变的动画。渐变动画使用起始点,大小,旋转方向已经其他动画特性信息来计算动画。
一个渐变动画可以对View内容进行一系列的简单变换,如位置,大小,方向,透明度等。所以,如果你有一个TextView对象,你可以移动,旋转,延伸,收缩TextView对象上的Text。如果它有背景图片,背景图片也会跟着text一起便便。animation package提供了一个渐变动画中使用的所有类。
渐变动画由一系列的动画指令来定义,你可以通过XML或者Android代码来定义。如同布局文件一样,推荐使用XML文件来定义动画,对比于硬编码的代码,它更可读,更易重用和交互。在下面的例子中,我们使用XML(要了解更多关于如何使用代码而不是XMl定义动画,查看 AnimationSet 和其他 Animation 子类。
动画指令定义了你想要的变换,发生的时间,已经动画持续的时间。变化可以是顺序的或同时发生,例如,你可以让TextView上面的内容从左到右然后旋转180度或者你也可以让移动和旋转同事进行。每个变换都有一系列的参数来描叙这个变换,如(通过起始大小来描叙大小的变换,其实角度来描叙角度变换等等),当然还有一些通用的参数如开始时间,持续时间。为了让几个变换同时开始,赋值给他们同样的开始时间;而为了让他们顺序的发生,用开始时间加上前面一个变换的持续。时间来得到开始时间。
动画XML文件定义在你的Android工程的res/anim目录这个文件必须有一个单一的根成员,该成员或者是<alpha>, <scale>, <translate>, <rotate>, interpolator element,或者是set成员,set成员由前面的成员或者另外一个set成员组成。默认情况下,所有的动画同时发生,为了让他们顺序发生,你必须添加一个startOffset属性,如下面实例中。

如下的XMl文件来自ApiDemos ,用来拉伸然后同时拉伸和旋转一个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"<pre name="code" class="java">ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

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),并且随着向下和向右移动而增大。 

一些值,如priotX,其值可以是相对与对象自己或其父对象。确保使用正确的格式来达到你想要的效果(50代表相对于父控件的50%,50%代表相对于自己50%)
你也可以分配一个插值器来定义一个变换是如何随着时间变化的。Android系统包含几个插值器子类来描述各种速度曲线。例如AccelerateInterpolator描述一个变换开始变换慢,然后加速。每个插值器都有一个属性值可以在XML文件中使用
如下的代码将会使用定义在res/anim目录下的 hyperspace_jump.xml动画文件来为布局中的一个ImageView对象设置动画

作为startAnimation()的另外一种选择,你可以通过Animation.setStartTime()为动画定义一个开始时间。然后通过View.setAnimation()把该动画设置到View对象上。
为了获取更多关于XML语法,可用的标记和属性,查看 Animation Resource。
注意:不管你的动画如何移动或调整大小,View的边界(动画的范围)不会自动的调整来适应动画。因此,如果动画超过了View的边界,它仍然会被绘制,而不会被裁剪。但是,如果动画超过了视图父视图的边界,裁剪将会发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值