美文网首页
Note3_公共技术点之 Android 动画基础之View动画

Note3_公共技术点之 Android 动画基础之View动画

作者: beforenight | 来源:发表于2017-06-20 14:04 被阅读17次

    Note3_公共技术点之Android 动画基础
    来源:http://t.cn/Ry92sKV 公共技术点之Android 动画基础

    1. 传统View动画(Tween/Frame)
      1.1 Tween 动画
    image.png

    文件位置:res/anim/filename.xml
    编译资源的数据类型:an Animation
    资源引用:
    Java:R.anim.filename
    XML:@[package:]anim/filename
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
    android:fromAlpha="float"
    android:toAlpha="float" />
    <scale
    android:fromXScale="float"
    android:toXScale="float"
    android:fromYScale="float"
    android:toYScale="float"
    android:pivotX="float"
    android:pivotY="float" />
    <translate
    android:fromXDelta="float"
    android:toXDelta="float"
    android:fromYDelta="float"
    android:toYDelta="float" />
    <rotate
    android:fromDegrees="float"
    android:toDegrees="float"
    android:pivotX="float"
    android:pivotY="float" />
    <set>
    ...
    </set>
    </set>
    布局文件必须有一个独立的根元素,可以是<alpha>,<scale>,<translate>,<rotate>,<set>(持有一组其它的动画元素,甚至可以是内嵌
    的set元素)中的一个
    1.1.1 <set>
    一个持有其它动画元素的容器<alpha>, <scale>, <translate>,<rotate>或者其它<set> 元素属性
    android:interpolator
    应用于动画的插值器。该值必须是一个指定了插值器资源的引用(不是一个插值器的类名),在平台中有缺省的插值器资源可以使用,或
    者你可以创建自己的插值器资源,可以看下面关于插值器的讨论。
    android:shareInterpolator
    Boolean 值,true:代表在所有的子元素中共享同一个插值器
    1.1.2 <alpha>
    A fade-in or fade-out animation. Represents an AlphaAnimation. 一个渐入渐出的动画,对应的java 类为AlphaAnimation。
    属性
    android:fromAlpha
    android:toAlpha
    代表动画开始和结束时透明度,0.0 表示完全透明,1.0 表示完全不透明,Float 值
    1.1.3 <scale>
    可以实现动态调控件尺寸的效果,通过设置pivotX 和pivotY 你可以指定image 缩放的中心点,比如:如果这些值是0,则表示左上
    角,所有的缩放变化将沿着右下角的轨迹运动。对应的类为:ScaleAnimation
    属性
    android:fromXScale
    android:toXScale
    android:fromYScale
    android:toYScale
    Float 值,为动画起始到结束时,X、Y 坐标上的伸缩尺寸
    0.0 表示收缩到没有
    1.0 表示正常无伸缩
    android:pivotX
    android:pivotY
    代表缩放的中轴点X/Y 坐标,浮点值
    如果我们想表示中轴点为图像的中心,我们可以把两个属性值定义成0.5 或者50%。
    1.1.4 <translate>
    代表一个水平、垂直的位移。对应的类为TranslateAnimation. 属性
    android:fromXDelta 属性代表起始X 方向的位置
    android:toXDelta
    android:fromYDelta
    android:toYDelta 属性代表起始Y 方向的位置
    代表动画起始或者结束X / Y 方向上的位置,Float 或者百分比值
    浮点数num%、num%p 分别相对于自身或者父控件
    如果以浮点数字表示,是一个绝对值,代表相对自身原始位置的像素值;
    如果以num%表示,代表相对于自己的百分比,比如toXDelta 定义为100%就表示在X 方向上移动自己的1 倍距离
    如果以num%p 表示,代表相对于父类组件的百分比。
    1.1.5 <rotate>
    是旋转动画,与之对应的Java 类是RotateAnimation
    属性
    android:fromDegrees
    android:toDegrees
    代表起始和结束的角度,浮点值,单位:度
    android:pivotX 属性代表旋转中心的X 坐标值
    android:pivotY 属性代表旋转中心的Y 坐标值
    Float 值或者百分比
    这两个属性也有三种表示方式,但是X 轴都是相对方向都是Left,Y 轴都是相对于Top
    浮点数、num%、num%p;
    数字方式代表相对于自身左边缘的像素值,
    num%方式代表相对于自身左边缘或顶边缘的百分比,
    num%p 方式代表相对于父容器的左边缘或顶边缘的百分比
    属性
    android:fromDegrees
    android:toDegrees
    开始和结束时的弧度位置,单位是度,Float 值
    调用代码
    ImageView image = (ImageView) findViewById(R.id.image);
    Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    image.startAnimation(hyperspaceJump);
    另外,在动画中,如果我们添加了android:fillAfter="true"后,这个动画执行完之后保持最后的状态;android:duration="integer"代
    表动画持续的时间,单位为毫秒。
    1.1.6 插值器
    用于修改一个动画过程中的速率,可以定义各种各样的非线性变化函数,比如加速、减速等
    在Android 中所有的插值器都是Interpolator 的子类,通过android:interpolator 属性你可以引用不同的插值器。下面是几种插值器:
    你可以通过下面的方式使用它们:

    image.png

    <set android:interpolator="@android:anim/accelerate_interpolator">
    ...
    </set>
    自定义插值器如果你对系统提供的插值器不满意,我们可以创建一个插值器资源修改插值器的属性,比如修改AnticipateInterpolator
    的加速速率,调整CycleInterpolator 的循环次数等。为了完成这种需求,我们需要创建XML 资源文件,然后将其放于/res/anim 下,
    然后再动画元素中引用即可。我们先来看一下几种常见的插值器可调整的属性:
    <?xml version="1.0" encoding="utf-8"?>
    <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />
    我们先来看一下几种常见的插值器可调整的属性:
    <accelerateDecelerateInterpolator> 无
    <accelerateInterpolator> android:factor 浮点值,加速速率,默认为1
    <anticipateInterploator> android:tension 浮点值,起始点后退的张力、拉力数,默认为2
    <anticipateOvershootInterpolator> android:tension 同上android:extraTension 浮点值,拉力的倍数,默认为1.5(2 * 1.5)
    <bounceInterpolator> 无
    <cycleInterplolator> android:cycles int,循环的个数,默认为1
    <decelerateInterpolator> android:factor 浮点值,减速的速率,默认为1
    <linearInterpolator> 无
    <overshootInterpolator> 浮点值,超出终点后的张力、拉力,默认为2
    比如:res/anim/my_overshoot_interpolator.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"/>
    This animation XML will apply the interpolator:
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />
    如果简单的修改插值器的属性值还不能够满足我们的需求,那么就自己来通过实现Interpolator 接口来定义自己的插值器了因为上面所
    有的Interpolator 都实现了Interpolator 接口,这个接口定义了一个方法:float getInterpolation(float input); 此方法由系统调
    用,input 代表动画的时间,在0 和1 之间,也就是开始和结束之间。
    线性(匀速)插值器定义如下:
    public float getInterpolation(float input) {
    return input;
    }
    加速减速插值器定义如下:
    public float getInterpolation(float input) {
    return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
    }

    相关文章

      网友评论

          本文标题:Note3_公共技术点之 Android 动画基础之View动画

          本文链接:https://www.haomeiwen.com/subject/tawoqxtx.html