美文网首页
android 属性动画执行结束后如何保持在最后一帧上

android 属性动画执行结束后如何保持在最后一帧上

作者: 尘尘尘尘尘 | 来源:发表于2020-06-19 09:24 被阅读0次

在某些场景时,需要添加动画效果,动画执行完成后,图片保持在最后一帧上。
分两种情况
1、单一动画效果
使用xml文件时 在 alpha、scale 、translate 、rotate 节点上添加

android:fillAfter="true"
android:fillEnabled="true"

或者在代码中设置

setFillAfter(true);
setFillEnabled(true);

2、动画合集
需要在xml文件的set标签内添加

 android:fillAfter="true"
android:fillEnabled="true"

或者在代码中设置

animationSet.setFillAfter(true);
animationSet.setFillEnabled(true);

动画监听

set.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始
            }
            @Override
            public void onAnimationEnd(Animation animation) {
                //动画结束
            }
            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

关于更多关于动画属性,阅读https://blog.csdn.net/harvic880925/article/details/39996643

代码设置属性动画

/**
     * 初始化动画
     */
    private void initAnima() {
        // 动画集合
        AnimationSet set = new AnimationSet(false);// 参数是否需要插补器

        // 旋转动画
        RotateAnimation rotate = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
        rotate.setDuration(1000);// 旋转时长
        rotate.setFillAfter(true);// 旋转后保持原状

        set.addAnimation(rotate);

        // 缩放动画
        ScaleAnimation scale = new ScaleAnimation(0, 1, 0, 1,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
        scale.setDuration(1000);// 旋转时长
        scale.setFillAfter(true);// 旋转后保持原状

        set.addAnimation(scale);

        // 淡入淡出(渐变)动画
        AlphaAnimation alpha = new AlphaAnimation(0, 1);
        alpha.setDuration(1000);// 旋转时长
        alpha.setFillAfter(true);// 旋转后保持原状

        set.addAnimation(alpha);

        // 动画监听
        set.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // 动画开始
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // 动画重复
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // 动画结束
                
            }
        });

        rlRoot.startAnimation(set);
    }

xml文件动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:fillEnabled="true">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="5000"
        android:repeatCount="0">
    </rotate>
    <scale
        android:fromXScale="1.0"
        android:toXScale="0.5"
        android:fromYScale="1.0"
        android:toYScale="0.5"
        android:pivotX="50%"
        android:duration="5000"
        android:pivotY="50%"
        >
    </scale>
</set>
      ```

相关文章

网友评论

      本文标题:android 属性动画执行结束后如何保持在最后一帧上

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