代码之家  ›  专栏  ›  技术社区  ›  pbreault

反转动画

  •  44
  • pbreault  · 技术社区  · 14 年前

    我有一个图像视图,当它被添加到布局中时,它会被设置为动画。 当它被移除时,我想反转相同的动画。

    在Android中,有没有一种方法可以在不重新编码和反转参数的情况下反转动画?

    8 回复  |  直到 6 年前
        1
  •  73
  •   pcans    14 年前

    package com.example.android;
    
    import android.view.animation.Interpolator;
    
    public class ReverseInterpolator implements Interpolator {
        @Override
        public float getInterpolation(float paramFloat) {
            return Math.abs(paramFloat -1f);
        }
    }
    

    myAnimation.setInterpolator(new ReverseInterpolator());
    
        2
  •  25
  •   Blo    8 年前

    ValueAnimator myAnimator = new ValueAnimator();  
    myAnimator.reverse()
    

    here

        3
  •  12
  •   Community CDub    8 年前

    pcans

    class ReverseInterpolator implements Interpolator{
        private final Interpolator delegate;
    
        public ReverseInterpolator(Interpolator delegate){
            this.delegate = delegate;
        }
    
        public ReverseInterpolator(){
            this(new LinearInterpolator());
        }
    
        @Override
        public float getInterpolation(float input) {
            return 1 - delegate.getInterpolation(input);
        }
    }
    

    ReverseInterpolator reverseInterpolator = new ReverseInterpolator(new AccelerateInterpolator())
    myAnimation.setInterpolator(reverseInterpolator);
    
        4
  •  6
  •   Dori    10 年前

    Interpolator Animation.REVERSE here

    public class ReverseInterpolator implements Interpolator {
    
        private final Interpolator mInterpolator;
    
        public ReverseInterpolator(Interpolator interpolator){
            mInterpolator = interpolator;
        }
    
        @Override
        public float getInterpolation(float input) {
            return mInterpolator.getInterpolation(reverseInput(input));
        }
    
        /**
         * Map value so 0-0.5 = 0-1 and 0.5-1 = 1-0
         */
        private float reverseInput(float input){        
            if(input <= 0.5)
                return input*2;
            else
                return Math.abs(input-1)*2;        
        }
    }
    
        5
  •  1
  •   draw    12 年前

        6
  •  0
  •   Khurram Shehzad    7 年前

    Animation.AnimationListener onAnimationEnd

        7
  •  0
  •   Goodlife    6 年前

     ObjectAnimator anim = ObjectAnimator.ofFloat(imageViewUpb, "rotation", rotationAngle, rotationAngle + 180);
    
                if (linearLayoutb.getVisibility()==GONE){
    
                    linearLayoutb.setVisibility(VISIBLE);
                    anim.setDuration(500);
                    anim.start();
                    rotationAngle += 180;
                    rotationAngle = rotationAngle%360;
            imageViewUpb.animate().rotation(rotationAngle).setDuration(500).start();
    
                }else{
    
                    linearLayoutb.setVisibility(GONE);
                    anim.setDuration(500);
                    anim.start();
                    rotationAngle += 180;
                    rotationAngle = rotationAngle%180;
    imageViewUpDownb.animate().rotation(rotationAngle).setDuration(500).start();
    
                }
    

    int rotationAngle = 0; global parameter

        8
  •  0
  •   larisoft    6 年前

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator">
        <alpha
            android:duration="2000"
            android:fromAlpha="0.1"
            android:repeatCount="infinite"
            android:repeatMode="reverse"
            android:toAlpha="1.0">
        </alpha>
    </set>