Android 使用揭露动画实现手机通知栏长按的效果

  framelayout.setOnLongClickListener(new View.OnLongClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean onLongClick(View v) {
                flag = !flag;
                if (flag) {
                    Animator animator = ViewAnimationUtils.createCircularReveal(
                            change,//作用在哪个View上面
                            framelayout.getWidth() / 2,
                            framelayout.getHeight() / 2,//扩散的中心点
                            0,//开始扩散初始半径
                            framelayout.getWidth());//扩散结束半径
                    animator.setDuration(1000);
                    animator.setInterpolator(new AccelerateInterpolator());

                    change.setVisibility(View.VISIBLE);

                    animator.start();

                } else {
                    Animator animator = ViewAnimationUtils.createCircularReveal(
                            change,//作用在哪个View上面
                            change.getWidth() / 2,
                            change.getHeight() / 2,//扩散的中心点
                            change.getWidth(),//开始扩散初始半径
                            0);//扩散结束半径
                    animator.setDuration(1000);
                    animator.setInterpolator(new AccelerateInterpolator());
                    animator.start();
                    animator.addListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            super.onAnimationEnd(animation);
                            change.setVisibility(View.GONE);
//                            tvshow.setVisibility(View.GONE);
                        }
                    });
                }
                return false;
            }
        });

代码不多就是控制一个显隐,XML

  <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="200dp"
        android:layout_height="wrap_content">


        <TextView
            android:id="@+id/defaul"
            android:padding="10dp"
            android:textColor="#fff"
            android:textSize="20sp"
            android:gravity="center"
            android:text="开始就显示的"
            android:background="@color/colorPrimary"
            android:layout_width="match_parent"
            android:layout_height="100dp" />


        <TextView
            android:visibility="gone"
            android:id="@+id/change"
            android:padding="10dp"
            android:textColor="#fff"
            android:textSize="20sp"
            android:gravity="center"
            android:background="@color/colorPrimaryDark"
            android:text="可以是布局"
            android:layout_width="match_parent"
            android:layout_height="100dp" />

    </FrameLayout>

这里需要注意几点:

1.控制显隐的时机  

2.隐藏之后,View是获取不到宽高的!!!

长按没做成 明天再搞,,,,加了坐标

framelayout.setOnTouchListener(new View.OnTouchListener() {
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:
                        float x = event.getX();
                        float y = event.getY();


                        //按下点 距上距下
                        int v1 = (int) Math.abs(bottom - y);
                        float min = Math.min(v1, y);


                        flag = !flag;
                        if (flag) {
                            Animator animator = ViewAnimationUtils.createCircularReveal(
                                    change,//作用在哪个View上面
                                    (int) x,
                                    (int) y,//扩散的中心点
                                    min,//开始扩散初始半径
                                    defaul.getWidth());//扩散结束半径
                            animator.setDuration(1000);
                            animator.setInterpolator(new AccelerateInterpolator());

                            change.setVisibility(View.VISIBLE);
                            animator.start();

                            animator.addListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {
                                    super.onAnimationEnd(animation);
                                    tvshow.setVisibility(View.VISIBLE);
                                }
                            });
                        } else {


                            Animator animator = ViewAnimationUtils.createCircularReveal(
                                    change,//作用在哪个View上面
                                    (int) x,
                                    (int) y,//扩散的中心点
                                    defaul.getWidth(),//开始扩散初始半径
                                    min);//扩散结束半径
                            animator.setDuration(1000);
                            animator.setInterpolator(new AccelerateInterpolator());
                            animator.start();
                            animator.addListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {
                                    super.onAnimationEnd(animation);
                                    change.setVisibility(View.GONE);
                                    tvshow.setVisibility(View.GONE);
                                }
                            });
                        }
                        break;

                    default:
                        break;
                }

                return false;
            }
        });

猜你喜欢

转载自blog.csdn.net/FlyPig_Vip/article/details/87798104