美文网首页
2.Tween Animation 补间动画

2.Tween Animation 补间动画

作者: Varmin | 来源:发表于2017-05-30 01:28 被阅读0次

资料链接

普通动画:

最大的特点是:并没有改变目标实际的属性(宽高/位置等)。例如:移动后,点击原来的位置出发点击事件;移动后再旋转,还是回到原来的位置旋转。

锚点:可以是数值、百分数、百分数p三种样式,比如50、50%、50%p。[不是只有pivotx/y才可以用这3中样式,其它变换的属性也可以]

当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;
如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;
如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标(是在目标的左上角原点加上相对于父控件宽度的距离,不是锚点在父控件的那个位置)。
fromX/toX等等类型的数据也可以用上面的3中数据 类型,只不过有的不适合。比如scale用%p就没意义了。养成好习惯,只在锚点的属性上随便用这3中类型,from/to属性分清类型用相应的数值(浮点倍数/角度...)。

从Animation继承的属性:
 android:duration 动画持续时间,以毫秒为单位 
android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
android:fillEnabled  与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
android:repeatCount 重复次数
android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。



scale:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="700"
    android:fromXScale="50%" //也可以用上面的3中类型
    android:fromYScale="50%"
    android:toXScale="200%"
    android:toYScale="200%"
    android:pivotX="0.5"
    android:pivotY="0.5"
    android:repeatCount = "2"
    android:repeatMode = "reverse"
    android:fillAfter = "true"
    />
alpha:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="0.1"
    android:toAlpha="1"
    android:duration="1500"
    android:repeatMode = "reverse"
    android:repeatCount = "2"
    android:fillAfter = "true"
    >
</alpha>
rotate:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromDegrees="0"
    android:toDegrees="270"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700"
    android:repeatMode = "reverse"
    android:repeatCount = "3"
    android:fillAfter = "true"
    >
</rotate>
translate:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="700"
    android:fillAfter="true"
    android:fromXDelta="50"
    android:fromYDelta="50%p"
    android:repeatCount="3"
    android:repeatMode="reverse"
    android:toXDelta="70%p"
    android:toYDelta="80%p">
</translate>

set: translate和rotate/scale共存时,会和想象中的不一样,可能是都有锚点属性的原因。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <!--<translate
        android:duration="2000"
        android:fromXDelta="0%p"
        android:fromYDelta="0%p"
        android:toXDelta="50%p"
        android:toYDelta="50%p" />-->
    <alpha
        android:fromAlpha="0.3"
        android:toAlpha="1"
        android:repeatMode = "reverse"
        android:duration="200"
        android:repeatCount = "10"
        />
    <scale
        android:fromYScale="1.0"
        android:fromXScale="1.0"
        android:toXScale="2.0"
        android:toYScale="2.0"
        android:pivotY="0"
        android:pivotX="0"
        android:duration="2000"
        />
    <rotate
        android:duration="1700"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="0"
        android:toDegrees="360" />
</set>
AnimationSet animSet = new AnimationSet(false);
        Animation scaleAnim = AnimationUtils.loadAnimation(this, R.anim.scale_anim); //资源文件
        Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
        AlphaAnimation alphaAnim = new AlphaAnimation(0.2f, 1.0f); //代码生成
        //valueType 3中类型的数据(px, 自身%, 父类%p),这里已自身为参照物。
        TranslateAnimation traslateAnim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.2f,
                Animation.RELATIVE_TO_SELF, 3.0f,
                Animation.RELATIVE_TO_SELF, 0f,
                Animation.RELATIVE_TO_SELF, 1.0f);
        animSet.setFillAfter(true);
        animSet.setDuration(2000);
        animSet.setInterpolator(new BounceInterpolator());
        animSet.addAnimation(scaleAnim);
        animSet.addAnimation(rotateAnim);
        animSet.addAnimation(alphaAnim);
        animSet.addAnimation(traslateAnim);
        ivTarget.startAnimation(animSet);

相关文章

网友评论

      本文标题:2.Tween Animation 补间动画

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