我尝试在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();
答案 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();