Instagram的心脏动画模仿--FadeScale动画

时间:2016-01-23 05:52:55

标签: android animation android-imageview

我试图创建一个类似于instagram双击动画的动画,其中心脏在渐渐消失的同时从中心向上扩展,然后它会保持可见一点点,然后在淡出时缩小到中心。

我正在使用这个动画:

public void animateHeart(final ImageView view) {
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(new AlphaAnimation(0.0f, 1.0f));
animation.addAnimation(new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f));
animation.setDuration(700);
animation.setRepeatMode(Animation.REVERSE);
view.startAnimation(animation);
}

它适用于出现动画,但动画不会反转。 另外,我希望它只动画一次。

有人可以告诉我,我做错了什么? 提前谢谢。

3 个答案:

答案 0 :(得分:6)

您只需使用代码启动一个Scale和Alpha动画。

这一行:

animation.setRepeatMode(Animation.REVERSE);

显然在AnimationSet中不能正常工作,因此您必须将它分别应用于每个动画。我会推荐这样的东西:

public void animateHeart(final ImageView view) {
    ScaleAnimation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    prepareAnimation(scaleAnimation);

    AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
    prepareAnimation(alphaAnimation);

    AnimationSet animation = new AnimationSet(true);
    animation.addAnimation(alphaAnimation);
    animation.addAnimation(scaleAnimation);
    animation.setDuration(700);
    animation.setFillAfter(true);

    view.startAnimation(animation);

}

private Animation prepareAnimation(Animation animation){
    animation.setRepeatCount(1);
    animation.setRepeatMode(Animation.REVERSE);
    return animation;
}

别忘了

animation.setFillAfter(true);

动画完成后,你的心会重新出现。

答案 1 :(得分:0)

           final Animation myAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.bounce);

                // Use bounce interpolator with amplitude 0.2 and frequency 20
                MyBounceInterpolator interpolator = new MyBounceInterpolator(0.1, 15);
                myAnim.setInterpolator(interpolator);

                imgFavourite.startAnimation(myAnim);

在res文件夹中添加一个anim文件夹。添加bounce.xml

    <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:duration="2000"
        android:fromXScale="0.3"
        android:toXScale="1.0"
        android:fromYScale="0.3"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%" />
</set>

创建MyBounceInterpolator.java类

public class MyBounceInterpolator implements android.view.animation.Interpolator {
    private double mAmplitude = 1;
    private double mFrequency = 10;

    public MyBounceInterpolator(double amplitude, double frequency) {
        mAmplitude = amplitude;
        mFrequency = frequency;
    }

    public float getInterpolation(float time) {
        return (float) (-1 * Math.pow(Math.E, -time / mAmplitude) *
                Math.cos(mFrequency * time) + 1);
    }
}

答案 2 :(得分:-2)

我对你昨天提出的问题有一个答案,标记为重复。如果你想要它只是在这里回复我。