Api 21 Circular Reveal Animation无效

时间:2014-11-20 14:17:56

标签: android animation android-5.0-lollipop

我不能让循环揭示动画工作。 我想我检查了最明显的事情: 它开始,宽度和高度> 0,它是可见的,没有异常..

我从互联网上加载一些数据并在视图中显示(fab) 动画应该只在下载完成后播放。

TmdbHelper helper = new TmdbHelper();
                helper.getMovieById(id, "en", new TmdbHelper.ResultListener() {
                    @Override
                    public void onResultReceived(JSONObject result) {

                        // called when finished downloading

                        try {
                            String rating = result.getString("vote_average");

                            AnimationHelper.circularReveal(fab, 500, 0); 

                            fab.setText(rating);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });

AnimationHelper:

    public static void circularReveal(final View view, final long duration, long startDelay) {

    // get the center for the clipping circle
    int cx = (view.getLeft() + view.getRight()) / 2;
    int cy = (view.getTop() + view.getBottom()) / 2;

    // get the final radius for the clipping circle
    int finalRadius = Math.max(view.getWidth(), view.getHeight());

    // create the animator for this view (the start radius is zero)
    Animator anim =
            ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);

    anim.setDuration(duration);
    anim.setStartDelay(startDelay);

    anim.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

            view.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {
        }

        @Override
        public void onAnimationCancel(Animator animation) {
        }

        @Override
        public void onAnimationRepeat(Animator animation) {}
    });

    // make the view visible and start the animation

    anim.start();
}

我在这样的其他部分使用圆形揭示动画来确保附加视图,并且它有效:

headerContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

                @Override
                public void onGlobalLayout() {
                    headerContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    AnimationHelper.circularReveal(headerContainer, 500, 200);
                }
            });

2 个答案:

答案 0 :(得分:0)

也许你应该在onResultRecieved()

中删除这一行
fab.setVisibility(View.VISIBLE);

我的假设是你的循环揭示方法工作正常。这是因为你在动画开始之前就已经看到了FAB,你无法看到它的实际效果。

另外,您展示的哪些行正常无效fab.setVisibility(View.VISIBLE)

答案 1 :(得分:0)

第一种方法: 尝试Transition Listener。

    if (Build.VERSION.SDK_INT >= 21) {
        Animator anim = ViewAnimationUtils.createCircularReveal(viewRoot, cx, cy, 0, finalRadius);
        anim.setStartDelay(300);
        anim.setDuration(1000);
        anim.setInterpolator(new DecelerateInterpolator());
        anim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

                viewRoot.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        anim.start();
    }
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        anim.start();

第二种方法:尝试设置启动延迟和监听动画,并在动画开始时设置视图可见

 --To check the list is in ascending order or not
 ascending::[Int]->Bool
 ascending [] =True
 ascending ((length l) == 1) =True 
 ascending l  =((head l)<=l !! 1) && ascending(tail l)