Xamarin安卓开发:动画Interpolator

来源:互联网 发布:cisco acl 端口控制 编辑:程序博客网 时间:2024/04/28 06:14

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);

1 0