滑动 bottomSheet 时为箭头按钮设置动画
Animate Arrow button while swiping bottomSheet
我得到了一个底部sheet,在滑动时我需要为指示天气用户向上或向下滑动的箭头按钮设置动画?
这是我的示例测试,如图所示,在滑动底部 sheet 时,底部的箭头按钮应在向上滑动时向下旋转,向下滑动时按钮应向上旋转.
谢谢,
周杰伦
可以使用 BottomSheetCallback
实现。您只需要通过回调提供的偏移量来旋转视图。例如:-
// set callback for changes
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
yourView.setRotation(slideOffset * 180);
}
});
Sachin 的回答很棒。
这是另一种解决方案,方法是保持底页的先前状态。
int previousBottomSheetState = BottomSheetBehavior.STATE_COLLAPSED
bottom_sheet.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
//to prevent rotation of the arrow if the users swipes down or up again, even when its already collapsed or expanded.
if (newState == BottomSheetBehavior.STATE_EXPANDED && newState != previousBottomSheetState) {
//update my bottomsheet state.
previousBottomSheetState = BottomSheetBehavior.STATE_EXPANDED;
(yourView).animate().rotationXBy(180).start();
} else if (newState == BottomSheetBehavior.STATE_COLLAPSED && newState != previousBottomSheetState) {
previousBottomSheetState = BottomSheetBehavior.STATE_COLLAPSED;
(yourView).animate().rotationXBy(180).start();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
我得到了一个底部sheet,在滑动时我需要为指示天气用户向上或向下滑动的箭头按钮设置动画?
这是我的示例测试,如图所示,在滑动底部 sheet 时,底部的箭头按钮应在向上滑动时向下旋转,向下滑动时按钮应向上旋转.
谢谢, 周杰伦
可以使用 BottomSheetCallback
实现。您只需要通过回调提供的偏移量来旋转视图。例如:-
// set callback for changes
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
yourView.setRotation(slideOffset * 180);
}
});
Sachin 的回答很棒。
这是另一种解决方案,方法是保持底页的先前状态。
int previousBottomSheetState = BottomSheetBehavior.STATE_COLLAPSED
bottom_sheet.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
//to prevent rotation of the arrow if the users swipes down or up again, even when its already collapsed or expanded.
if (newState == BottomSheetBehavior.STATE_EXPANDED && newState != previousBottomSheetState) {
//update my bottomsheet state.
previousBottomSheetState = BottomSheetBehavior.STATE_EXPANDED;
(yourView).animate().rotationXBy(180).start();
} else if (newState == BottomSheetBehavior.STATE_COLLAPSED && newState != previousBottomSheetState) {
previousBottomSheetState = BottomSheetBehavior.STATE_COLLAPSED;
(yourView).animate().rotationXBy(180).start();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});