gpt4 book ai didi

Android Bottom Sheet 平滑扩展,如谷歌地图

转载 作者:IT老高 更新时间:2023-10-28 23:07:11 26 4
gpt4 key购买 nike

我想重新创建 Google map 应用中提供的 Bottom Sheet 行为:

Link to expected behavior.

我试过使用 BottomSheetBehavior以及其他几个 3rd 方库,例如 umano AndroidSlidingUpPanel,但我无法避免的问题是它们都在状态(折叠和展开)之间捕捉 Bottom Sheet 。

我想要一个 Bottom Sheet ,它可以通过向上滑动平滑展开,而不是捕捉到最近的状态,而是保持在用户停止滑动的位置。

最佳答案

您可以通过继承 BottomSheetBehavior 并覆盖 onTouchEvent 以提前返回 ACTION_UPACTION_CANCEL 来实现此目的。

public class CustomBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> {

public CustomBottomSheetBehavior() {
super();
}

public CustomBottomSheetBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {

int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
return true;
}

return super.onTouchEvent(parent, child, event);
}
}

这会阻止 BottomSheetBehavior 类处理这些事件并触发“展开”或“折叠”调用。

在 xml 中应用您的 CustomBottomSheetBehavior:app:layout_behavior="com.yourpackage.CustomBottomSheetBehavior"


要在工作表完全展开或折叠时恢复 BottomSheetBehavior 的默认功能,您可以添加一个标志,该标志在幻灯片偏移量达到某个值时设置。在下面的例子中, Bottom Sheet 的 ACTION_UPACTION_CANCEL 事件仅在幻灯片偏移量在 0.1 和 0.9 之间时被忽略。

public class CustomBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> {

private boolean isExpandedOrCollapsed;

public CustomBottomSheetBehavior() {
super();

listenForSlideEvents();
}

public CustomBottomSheetBehavior(Context context, AttributeSet attrs) {
super(context, attrs);

listenForSlideEvents();
}

void listenForSlideEvents() {
setBottomSheetCallback(new BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
isExpandedOrCollapsed = slideOffset < 0.1f || slideOffset > 0.9f;
}
});
}

@Override
public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {

if (!isExpandedOrCollapsed) {
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
return true;
}
}

return super.onTouchEvent(parent, child, event);
}
}

关于Android Bottom Sheet 平滑扩展,如谷歌地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45234627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com