Android 样式 :View Animation篇

2017-11-01  本文已影响15人  小武_2170

Android框架还提供了另外两种动画体系:视图动画(View Animation)和属性动画(Property Animation)。视图动画比较简单,只能应用于各种View,可以做一些位置、大小、旋转和透明度的简单转变。属性动画则是在android 3.0引入的动画体系,提供了更多特性和灵活性,也可以应用于任何对象,而不只是View。本篇先讲视图动画。

视图动画只能作用于View,而且视图动画改变的只是View的绘制效果,View真正的属性并没有改变。比如,一个按钮做平移的动画,虽然按钮的确做了平移,但按钮可点击的区域并没随着平移而改变,还是在原来的位置。而属性动画则可以改变真正的属性,从而实现按钮平移时点击区域也跟着平移。

在xml文件res/目录下创建anim文件,可以通过<alpha>, <scale>, <translate>, <rotate>, 或者<set>属性元素来实现动画.

通用属性
<alpha> 透明度渐变动画

渐变也就是淡入淡出的效果,通过下面三个属性实现:

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromAlpha="0.2"
    android:toAlpha="1.0" />

view 调用

button.startAnimation(AnimationUtils.loadAnimation(this,R.anim.alpha_animation));
<scale>缩放动画

属性:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.5"
    android:toYScale="1.5"
    />

View 调用

button.startAnimation(AnimationUtils.loadAnimation(this,R.anim.scale_animation));
<translate>位置移动动画

可以是垂直方向的移动,也可以是水平方向的移动。坐标的值可以有三种格式:从-100到100,以"%"结束,表示相对于View本身的百分比位置;如果以"%p"结束,表示相对于View的父View的百分比位置;如果没有任何后缀,表示相对于View本身具体的像素值。主要的属性如下:
android:duration 动画从开始到结束持续的时长,单位为毫秒
android:fromXDelta 起始位置的X坐标的偏移量
android:toXDelta 结束位置的X坐标的偏移量
android:fromYDelta 起始位置的Y坐标的偏移量
android:toYDelta 结束位置的Y坐标的偏移量

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromXDelta="-100"
    android:fromYDelta="-100"
    android:toXDelta="100%"
    android:toYDelta="100%"
    />

View 调用

button.startAnimation(AnimationUtils.loadAnimation(this,R.anim.translate_animation));
<rotate> 旋转动画

属性:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromXDelta="-100"
    android:fromYDelta="-100"
    android:toXDelta="100%"
    android:toYDelta="100%"
    />

View调用

button.startAnimation(AnimationUtils.loadAnimation(this,R.anim.rotate_animation));
<set> 动画集合

<set>标签在视图动画中可以组合<alpha>, <scale>, <translate>, <rotate>这四种标签.

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:shareInterpolator="true">
    <alpha
        android:fromAlpha="0.3"
        android:toAlpha="1.0" />
    <scale
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50"
        android:pivotY="50"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <translate
        android:fromXDelta="-100"
        android:fromYDelta="-100"
        android:toXDelta="100"
        android:toYDelta="100" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="10"
        android:pivotY="10"
        android:toDegrees="3600"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
   />
</set>

View调用

button.startAnimation(AnimationUtils.loadAnimation(this,R.anim.set_animation));

Interpolator 动画速率变化

interpolator可以定义动画速率变化的方式,比如加速、减速、匀速等,每种interpolator都是 Interpolator 类的子类,Android系统已经实现了多种interpolator,对应也提供了公共的资源ID,
如下:

Interpolator class Resource ID Description
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 在动画开始与结束时速率改变比较慢,在中间的时候加速
AccelerateInterpolator @android:anim/accelerate_interpolator 在动画开始时速率改变比较慢,然后开始加速
AnticipateInterpolator @android:anim/anticipate_interpolator 动画开始的时候向后然后往前抛
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 动画开始的时候向后然后向前抛,会抛超过目标值后再返回到最后的值
BounceInterpolator @android:anim/bounce_interpolator 动画结束的时候会弹跳
CycleInterpolator @android:anim/bounce_interpolator 动画循环做周期运动,速率改变沿着正弦曲线
DecelerateInterpolator @android:anim/decelerate_interpolator 在动画开始时速率改变比较快,然后开始减速
LinearInterpolator @android:anim/decelerate_interpolator 动画匀速播放
OvershootInterpolator @android:anim/overshoot_interpolator 动画向前抛,会抛超过最后值,然后再返回
上一篇 下一篇

猜你喜欢

热点阅读