按下按钮时,我正在使用此动画:
void circleAnimationEnter(final View view, final View view2) {
// get the center for the clipping circle
int cx = Math.round(view2.getX() + view2.getWidth() / 2);
int cy = Math.round(view2.getY() - view2.getHeight() / 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;
Animation animation;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
anim = ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius);
// make the view visible and start the animation
view.setVisibility(View.VISIBLE);
anim.setDuration(1000);
anim.setInterpolator(new AccelerateInterpolator());
anim.start();
} else {
view.setVisibility(View.VISIBLE);
view.animate()
.translationX(0)
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
}
}
View1是隐藏/显示的视图,view2是要按的按钮。
同样的动画(有些变化),当我按下相同的按钮再次改变可见度时隐藏。
问题在于,第一次按下按钮时,动画滞后(视图显示为圆形动画),但下次按下按钮时,视图可见性随动画而变化(两者都是完美地展示和隐藏。
我正在使用CollapsingToolbarLayout,也许这可能是问题?
是否滞后?或者只是第一次Android没有得到正确的X和Y?
感谢您的帮助,对不起我的英语!
编辑:
问题在于获取cx和cy的值。
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
// get the center for the clipping circle
cx = Math.round(width-width*10/100);
cy = Math.round(height-height*38/100);
initialRadius = Math.max(width*3/2, height*3/2);
finalRadius = initialRadius;
我的动画不再滞后,但问题是如果工具栏折叠或展开,cx和cy正在改变...(我不明白这一点,因为我得到的屏幕大小,所以我的cx和cy应该是一样的...)
答案 0 :(得分:0)
我解决了,问题是它崩溃时的应用栏......
final AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.app_bar);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
// get the center for the clipping circle
cx = Math.round(floatingActionButton.getX() + floatingActionButton.getWidth() / 2);
boolean fullyExpanded = (appBarLayout.getHeight() - appBarLayout.getBottom()) == 0;
if (!fullyExpanded) {
cy = Math.round(floatingActionButton.getY() - floatingActionButton.getHeight());
} else {
cy = Math.round(floatingActionButton.getY() + floatingActionButton.getHeight()/2) - appBarLayout.getHeight();
}
initialRadius = Math.max(width * 3 / 2, height * 3 / 2);
finalRadius = initialRadius;
}
});
使用该代码,我完美地获得了fab按钮cx / cy,并添加了3/2到半径,以避免圆形动画效果的高度/宽度问题。