- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想重新创建 Google map 应用中提供的 Bottom Sheet 行为:
Link to expected behavior.
我试过使用 BottomSheetBehavior以及其他几个 3rd 方库,例如 umano AndroidSlidingUpPanel,但我无法避免的问题是它们都在状态(折叠和展开)之间捕捉 Bottom Sheet 。
我想要一个 Bottom Sheet ,它可以通过向上滑动平滑展开,而不是捕捉到最近的状态,而是保持在用户停止滑动的位置。
最佳答案
您可以通过继承 BottomSheetBehavior
并覆盖 onTouchEvent
以提前返回 ACTION_UP
和 ACTION_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_UP
和 ACTION_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/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!