欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给View设置点击效果动画

程序员文章站 2022-05-05 12:29:56
...

代码

public class AnimationUtil {
    public enum AnimationType {
        PRESS, ROTATION
    }

    //存放View 是否在执行动画中
    private static HashMap<String, Boolean> animationMap = new HashMap<>();

    //按下动画
    public static void doAnimation(View view, AnimationType type) {
        String name = view.getId() + type.name();
        if (animationMap.get(name) == null || animationMap.get(name)) {
            switch (type) {
                case PRESS:
                    doPressAnimation(view);
                    break;
                case ROTATION:
                    doRotationAnimation(view);
                    break;
            }
        }
    }

    private static void doPressAnimation(final View view) {
        float y = view.getY();
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "y", y, y + 30, y);
        animator.setDuration(500);
        animator.setRepeatCount(0);
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                animationMap.put(view.getId() + AnimationType.PRESS.name(), false);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                animationMap.put(view.getId() + AnimationType.PRESS.name(), true);
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.setInterpolator(new AccelerateDecelerateInterpolator());
        animator.start();
    }


    private static void doRotationAnimation(final View view) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "rotation", 0, 20f, -20f, 20f, -20f, 0);
        animator.setDuration(500);
        animator.setRepeatCount(0);
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                animationMap.put(view.getId() + AnimationType.ROTATION.name(), false);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                animationMap.put(view.getId() + AnimationType.ROTATION.name(), true);
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.setInterpolator(new AccelerateDecelerateInterpolator());
        animator.start();
    }


}
复制代码



用法

 AnimationUtil.doAnimation(View, AnimationUtil.AnimationType.PRESS);
 AnimationUtil.doAnimation(View, AnimationUtil.AnimationType.ROTATION);
复制代码