Xamarin安卓开发:动画Interpolator

xamarin安卓开发中添加动画有好几种,这里归纳一下其中一种 interpolator,能够实现一些简单的平移、缩放、旋转、透明度变化等动画,基本够用了,做页面跳转可以用。


1interpolator的分类

android:interpolator: 加速器,非常有用的属性,可以简单理解为动画的速度,可以是越来越快,也可以是越来越慢,或者是先快后忙,或者是均匀的速度等等,对于值如下:

  • @android:anim/accelerate_interpolator 越来越快
  • @android:anim/decelerate_interpolator:越来越慢
  • @android:anim/accelerate_decelerate_interpolator:先快后慢
  • @android:anim/anticipate_interpolator: 先后退一小步然后向前加速
  • @android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点
  • @android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点
  • @android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点
  • @android:anim/linear_interpolator:均匀速度。


2几种动画

alpha动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator">  
    <alpha  
        android:fromAlpha="1.0"  
        android:toAlpha="0.0"  
        android:startOffset="500"  
        android:duration="2000"  
     />  
  
</set>
scale动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator">  
    <scale  
        android:fromXScale="1.0"  
        android:toXScale="0.0"  
        android:fromYScale="1.0"  
        android:toYScale="0.0"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:duration="2000"  
    />  
  
</set>
rotate动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator">  
    <translate  
        android:fromXDelta="50%"  
        android:toXDelta="100%"  
        android:fromYDelta="50%"  
        android:toYDelta="100%"  
        android:duration="3000"  
    />  
  
</set>
translate动画:
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator">  
    <translate  
        android:fromXDelta="50%"  
        android:toXDelta="100%"  
        android:fromYDelta="50%"  
        android:toYDelta="100%"  
        android:duration="3000"  
    />  
  
</set>
属性解释:

duration: 动画运行时间,定义在多次时间(ms)内完成动画

startOffset: 延迟一定时间后运行动画

fromXDelta: X轴方向开始位置,可以是%,也可以是具体的像素 具体见图

toXDelta:   X轴方向结束位置,可以是%,也可以是具体的像素

fromYDelta: Y轴方向开始位置,可以是%,也可以是具体的像素

toYDelta:    Y轴方向结束位置,可以是%,也可以是具体的像素

fromAlpha: 开始透明度

toAlpha: 结束透明度

pivotX: 锚点x坐标

pivotY: 锚点y坐标


3translate动画实例

示意图:





定义一个向上退出的动画(从位置移动位置3)和从下面进入(从位置1移动位置2)的动画定义文件如下:

注意xml写法跟上面不一样,单独的translate标签,没有套在set里

out_to_up.xml (从屏幕上面退出)

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_interpolator"

    android:fromYDelta="0%p"

    android:toYDelta="-100%p"

    android:duration="1000">

</translate>
in_from_down.xml (从屏幕下面进入)
<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_interpolator"

    android:fromYDelta="100%p"

    android:toYDelta="0%p"

    android:duration="1000">

</translate>
上面动画可以用在activity切换上。


4复合动画

可以再xml文件中定义多个Animation,这样多个Animation可以一起运行,例如:

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:shareInterpolator="true"  
    >  
    <alpha  
        android:fromAlpha="1.0"  
        android:toAlpha="0.0"  
        android:startOffset="500"  
        android:duration="3000"  
            />  
    <rotate  
        android:fromDegrees="0"  
        android:toDegrees="400"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:duration="3000"  
    />  
  
</set> 
各个动画效果可以用一个set标签叠加起来,达到更好的效果。


5使用动画

定义一个动画,关联一个xml文件,然后调用某界面元素的StartAnimation函数

var in_animation = AnimationUtils.LoadAnimation(this, Resource.Animation.zoom_in);
object.StartAnimation(in_animation);

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。