在滑动底部表单时,使箭头按钮动画化

3

我有一个底部工作表,在向上或向下滑动时需要动画化箭头按钮,指示用户向上或向下滑动?enter image description here

这是我的样例测试之一,当您在图像中看到的底部工作表上滑动时,底部的箭头按钮应该向下旋转,而在向下滑动时应旋转向上。

谢谢, 杰伊

2个回答

16

你可以使用BottomSheetCallback来实现它。你只需要将视图旋转到回调提供的偏移量即可。例如:

这是通过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);
    }
});

360度将完全旋转视图。我们需要将视图旋转一半,因此为180度,简单的数学计算。只是为了演示,将180改为360。你会明白的,:-)。很乐意帮助 - undefined
谢谢,这正是我所需要的。 - undefined

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接