CircularReveal

        final FrameLayout fl_frame = findViewById(R.id.fl_frame);
        final Button btn_button = findViewById(R.id.btn_button);
        final DisplayMetrics dm = getResources().getDisplayMetrics();
        int w_screen = dm.widthPixels;//屏幕宽度
        int h_screen = dm.heightPixels;//屏幕高度
        final int x = (int) (dm.widthPixels / dm.density) / 2;//屏幕中心点x
        final int y = (int) (dm.heightPixels / dm.density) / 2;//屏幕中心点y
        Log.i(TAG, "屏幕尺寸2:宽度 = " + w_screen + "高度 = " + h_screen + "密度 = " + dm.density);
        btn_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CircularReveal.startAnimation(MyApplication.getContext(), fl_frame, x, y, btn_button);
            }
        });



import android.animation.Animator;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.widget.Button;
import android.widget.FrameLayout;

import static android.content.ContentValues.TAG;

public class CircularReveal {
    /**
     * @param context context
     * @param frame   执行动画的布局
     * @param x       x点
     * @param y       y点
     * @param btn     控制动画的按钮
     */
    public static void startAnimation(final Context context, final FrameLayout frame, int x, int y, final Button btn) {
        //隐藏
        if (frame.getVisibility() == View.VISIBLE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//>=21 开始动画
                final Animator animatorHide = ViewAnimationUtils.createCircularReveal(frame, frame.getWidth() - dip2px(context, x), dip2px(context, y), (float) Math.hypot(frame.getWidth(), frame.getHeight()), 0);
                animatorHide.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        btn.setClickable(false);//动画开始之后,将按钮设置不可以点击,防止动画中断
                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        frame.setVisibility(View.GONE);//动画结束之后布局隐藏
                        btn.setClickable(true);//动画结束之后可以点击
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {
                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {
                    }
                });
                animatorHide.setDuration(3000);//动画时间
                animatorHide.start();
            } else {//否则将布局直接隐藏
                frame.setVisibility(View.GONE);
            }
            frame.setEnabled(false);
        }
        //显示
        else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//>=21 开始动画
                final Animator animator = ViewAnimationUtils.createCircularReveal(frame, frame.getWidth() - dip2px(context, x), dip2px(context, y), 0, (float) Math.hypot(frame.getWidth(), frame.getHeight()));
                frame.setVisibility(View.VISIBLE);
                if (frame.getVisibility() == View.VISIBLE) {
                    animator.addListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                            btn.setClickable(false);//动画开始之后不可以点击
                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            frame.setVisibility(View.VISIBLE);//动画结束之后布局显示
                            btn.setClickable(true);//动画结束之后可以点击
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {
                        }

                        @Override
                        public void onAnimationRepeat(Animator animation) {
                        }
                    });
                    animator.setDuration(3000);//动画时间
                    animator.start();
                    frame.setEnabled(true);//显示时激活
                }
            } else {//否则将布局直接显示
                frame.setVisibility(View.VISIBLE);
            }
            frame.setEnabled(true);
        }
    }


    public static int dip2px(Context context, float dp) {
        final float scale = context.getResources().getDisplayMetrics().density;
        Log.i(TAG, "dip2px: " + (int) (dp * scale + 0.5));
        return (int) (dp * scale + 0.5);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值