Android L揭示效果不起作用

时间:2014-12-17 04:26:25

标签: android android-5.0-lollipop

我尝试在createCircularReveal()中实施FloatingButton。但动画太快了。如何增加动画的持续时间。我试过了setDuration(milli-seconds),但它没有用。

我关注developer.android.com,Defining Custom Animations

这是我的代码:

int cx = (fabBtn.getLeft() + fabBtn.getRight()) / 2;
int cy = (fabBtn.getTop() + fabBtn.getBottom()) / 2;

int finalRadius = Math.max(fabBtn.getWidth(), fabBtn.getHeight());
Animator anim = ViewAnimationUtils.createCircularReveal(fabBtn, cx, cy, 2, finalRadius);
anim.setDuration(2000);
fabBtn.setVisibility(View.VISIBLE);
anim.start();

3 个答案:

答案 0 :(得分:11)

我也正如我所提到的那样面对这个问题,我可以通过将cx和cy作为图像视图的中心位置来解决这个问题(在你的情况下,我认为它是按钮)。
所以使用这个来获取cx和cy:

int cx = (fabBtn.getWidth()) / 2;
int cy = (fabBtn.getHeight()) / 2;

而不是::

int cx = (fabBtn.getLeft() + fabBtn.getRight()) / 2;
int cy = (fabBtn.getTop() + fabBtn.getBottom()) / 2;

答案 1 :(得分:0)

您可能过早致电getWidth()getHeight()

所以你必须使用getViewTreeObserver()

请务必将持续时间添加到anim.setDuration(time),并将视图的初始可见度设置为INVISIBLE

这里是代码:

public void checker() {
    myView.getViewTreeObserver().addOnPreDrawListener(
            new ViewTreeObserver.OnPreDrawListener() {
                public boolean onPreDraw() {
                    int finalHeight = myView.getMeasuredHeight();
                    int finalWidth = myView.getMeasuredWidth();
                    // Do your work here
                    myView.getViewTreeObserver().removeOnPreDrawListener(this);

                    cx = finalHeight / 2;
                    cy = finalWidth / 2;


                    finalRadius = Math.max(finalHeight, finalWidth);
                    anim = ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
                    myView.setVisibility(View.VISIBLE);
                    anim.setDuration(3000);
                    anim.start();


                    return true;
                }
            });

}

答案 2 :(得分:-1)

我认为我遇到了同样的问题,但似乎由于某种原因,仅仅2000毫秒的持续时间对于动画显示来说还不够。当我将持续时间设置为3000时,我看到了一个漂亮的圆形动画。

1秒的小延迟也有助于

                // get the center for the clipping circle
                int cx = myView.getWidth() / 2;
                int cy = myView.getHeight() / 2;

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

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

                // make the view visible when the animation starts
                anim.addListener(new AnimatorListenerAdapter()
                {
                    @Override
                    public void onAnimationStart(Animator animation)
                    {
                        super.onAnimationStart(animation);
                        myView.setVisibility(View.VISIBLE);
                    }
                });

                // start the animation
                anim.start();