滑动 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) {
            }
        });