Android CircularReveal库查看可见性错误

时间:2016-03-12 23:30:27

标签: android animation view invisible circularreveal

我使用this libary在前Lollipop设备上创建CircularReveal动画。问题在于隐藏View动画。动画也会执行,但在动画结束后,View会在一秒钟内变为可见,然后消失。如何防止View闪烁?

以下是使用CircularReveal动画隐藏View的方法:

public static void revealCloseTopRight(final View view) {
            int cx = view.getRight();
            int cy = view.getTop();

            // get the final radius for the clipping circle
            int dx = Math.max(cx, view.getWidth() - cx);
            int dy = Math.max(cy, view.getHeight() - cy);
            float finalRadius = (float) Math.hypot(dx, dy);

            SupportAnimator animator = ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);
            animator.setInterpolator(new AccelerateDecelerateInterpolator());
            animator.setDuration(animDuration);
            animator = animator.reverse();

            try {
                animator.start();
            } catch (Exception ex) {
                ex.printStackTrace();
            }

            view.postDelayed(new Runnable() {
                @Override
                public void run() {
                    view.setVisibility(View.INVISIBLE);
                }
            }, animDuration);
        }

更新

我还试图像这样添加SupportAnimator.AnimatorListener()

animator.addListener(new SupportAnimator.AnimatorListener() {
                @Override
                public void onAnimationStart() {
                    Log.d(AnimationSupport.TAG, TAG + " -> 1onAnimationStart()");

                }

                @Override
                public void onAnimationEnd() {
                    Log.d(AnimationSupport.TAG, TAG + " -> 1onAnimationEnd()");
                    view.setVisibility(View.INVISIBLE);
                }

                @Override
                public void onAnimationCancel() {
                    Log.d(AnimationSupport.TAG, TAG + " -> 1onAnimationCancel()");

                }

                @Override
                public void onAnimationRepeat() {
                    Log.d(AnimationSupport.TAG, TAG + " -> 1onAnimationRepeat()");

                }
            });

Animator.AnimatorListener()就像这样:

animator.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
                    Log.d(AnimationSupport.TAG, TAG + " -> onAnimationStart()");

                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    Log.d(AnimationSupport.TAG, TAG + " -> onAnimationEnd()");
                    view.setVisibility(View.INVISIBLE);
                }

                @Override
                public void onAnimationCancel(Animator animation) {
                    Log.d(AnimationSupport.TAG, TAG + " -> onAnimationCancel()");

                }

                @Override
                public void onAnimationRepeat(Animator animation) {
                    Log.d(AnimationSupport.TAG, TAG + " -> onAnimationRepeat()");

                }
            });

在这两种情况下,都不会调用此回调。我不明白为什么。

2 个答案:

答案 0 :(得分:0)

视图正在显示,因为动画完成和处理程序执行之间的延迟非常小。

您可以通过向圆形显示动画添加动画侦听器并将视图设置为onAnimationEnd()回调中的隐形来解决此问题。

答案 1 :(得分:0)

请确保在您要为视图设置动画的布局中没有

android:animateLayoutChanges="true"

根viewGroup中的属性。

进行此项删除可帮助您克服动画结束后的眨眼现象,并将可见性设置为“消失”(或“不可见”)。