您的位置:首页 > 移动开发 > Android开发

View动画 View Animator——翻译自developer.android.com

2016-06-28 14:25 411 查看
你可以使用view动画来实现view间的间补动画。间补动画使用起始点,结束点,大小,旋转以及其他的其他的动画的典型的参数来计算动画。一个间补动画可以运行一系列的简单的变形在view对象的内容上,比如位置,大小,旋转和透明度。所以,胶乳你有一个textView的对象,你可以移动,旋转,放大和缩小。如果他有一个背景图片,那么背景图片也会随着改变。animation package 提供了在间补动画中用到的所有的类。

一系列的动画指令定义了间补动画,使用xml文件或者代码都可以进行定义。推荐使用xml文件来定义布局因为其拥有可读性,可重用性,和可交换性,相比直接代码而言。在下面的例子里面,我们使用xml。(了解更多关于怎样使用代码而不是xml定义动画的内容,可以参见 AnimationSet类 和其他的Animation的子类)

动画制定定义了你想要发生的变形,什么时候发生,以及要经过多久才能应用。变形过程可以序列化发生也可以同时发生,比如你让一个按钮从屏幕的左边移动到右边,然后再旋转180度,也可以一边移动一边旋转180度。每一个变形都有一系列的参数来指定变换,比如对于尺寸变换的起始尺寸和结束尺寸,以及对于旋转变换的开始角度和结束角度,另外还有一些典型的参数,比如说喀什的事件和持续的时间。如果想要动画同时发生,就给他们相同的起始时间。如果想让他们序列化发生,就计算前一个事件的起始事件加上持续的时间。

动画的xml文件在工程的res/anim/目录下。这个文件必须有唯一的跟元素,可以是唯一的<alpha>,<scal>,<translate>,<rotate>,插值元素,或者<set>元素,其中包含了元素的集合,当然其中仍然可以有<set>。默认情况下,动画制定都会以同步的方式被应用。想要他们序列化执行,就需要指定其中的startOffset属性,如同下面的例子中展示的那样。

西面的一个ApiEmos中的代码使用了xml文件,同时执行了拉伸和旋转。

<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包含一系列的interplator的子类,可以制定多种的速度曲线,例如AccelerateInterpolator让一个变形开始的时候很慢并开始加速。每一个都有一个可以应用在xml中的属性。

在工程目录下的res/anim/目录下,使用了一个hyperspace_jump.xml的xml文件,可以使用下面的代码应用高一个ImageView对象当中。

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

一种启动动画的方式startAnimation(),你可以先定义一个animation的起始时间,使用Animation.setStartTime(),接着使用View.setAnimation()来设定动画。

更多关于xml语法,标签和属性的信息请查看AnimationResourses。

提示:

无论你的动画怎样的运动和变形,容纳你的view的边界都不会自动去适配它。尽管这样,动画会在边界外边被绘制,而且不会被剪切。但是当动画超出父控件的边界的时候就会被剪切了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: