- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Hiện tại tôi đang sử dụng thư viện này Ở trang dưới cùng, tôi muốn đạt được hình ảnh động như vậybản đồ googleTrong khi trượt bảng dưới cùng, tôi muốn trượt chế độ xem hình ảnh cùng với hình ảnh được hiển thị, tôi đã sử dụng cái nàyliên kết để được giúp đỡNhưng không nhận được nó. Tôi đã cố gắng rất nhiều thời gian nhưng không thể tìm ra giải pháp nào, mọi trợ giúp đều được đánh giá cao. Cảm ơn trước..
câu trả lời hay nhất
bạn có thểÔn lại默认Hành vi
Được sử dụng cho BottomSheet, ImageView, ToolBars và FAB.
Trước tiên, bạn cần thêm trạng thái vào BottomSheetBehavior. Bạn có thể làm điều này bằng cách làm theo các bước sau:
Điều phối viênLayout.Behavior
mở rộng nóBảng dưới cùngHành vi
Các tập tin mới được gửi cho bạn.Phương pháp sửa đổikẹpViewPositionDọc
Sử dụng mã sau đây:
@Ghi đè
public int kẹpViewPositionVertical(Xem con, int top, int dy) {
ràng buộc trả về (top, mMinOffset, mHideable ? mParentHeight : mMaxOffset);
}
ràng buộc int(số tiền int, int thấp, int cao) {
số tiền trả lại < thấp ? thấp : (số tiền > cao ? cao : số tiền);
}
thêm trạng thái mới
công khai tĩnh int STATE_ANCHOR_POINT = X;
Sửa đổi phương pháp tiếp theo:onLayoutChild
, onStopNestedScroll
, BottomSheetBehavior
Và setState
(không bắt buộc)
Tôi sẽ thêm các phương pháp đã sửa đổi đó và một liên kết đến dự án ví dụnơi bạn có thể thấy tất cả các hành vi tùy chỉnh của mình
boolean công khai onLayoutChild(Điều phối viênLayout cha mẹ, V con, int bố cụcDirection) {
// Đầu tiên hãy để cha mẹ đặt nó ra
if (mState != STATE_DRAGGING && mState != STATE_SETTLING) {
if (ViewCompat.getFitsSystemWindows(parent) &&
!ViewCompat.getFitsSystemWindows(child)) {
ViewCompat.setFitsSystemWindows(child, true);
}
parent.onLayoutChild(con, bố cụcDirection);
}
// Offset sheet dưới cùng
mParentHeight = parent.getHeight();
mMinOffset = Math.max(0, mParentHeight - child.getHeight());
mMaxOffset = Math.max(mParentHeight - mPeekHeight, mMinOffset);
//if (mState == STATE_EXPANDED) {
// ViewCompat.offsetTopAndBottom(child, mMinOffset);
//} else if (mHideable && mState == STATE_HIDDEN...
if (mState == STATE_ANCHOR_POINT) {
ViewCompat.offsetTopAndBottom(con, mAnchorPoint);
} khác nếu (mState == STATE_EXPANDED) {
ViewCompat.offsetTopAndBottom(con, mMinOffset);
} else if (mHideable && mState == STATE_HIDDEN) {
ViewCompat.offsetTopAndBottom(con, mParentHeight);
} else if (mState == STATE_COLLAPSED) {
ViewCompat.offsetTopAndBottom(con, mMaxOffset);
}
nếu (mViewDragHelper == null) {
mViewDragHelper = ViewDragHelper.create(parent, mDragCallback);
}
mViewRef = new WeakReference<>(con);
mNestedScrollingChildRef = new WeakReference<>(findScrollingChild(child));
trả về đúng sự thật;
}
public void onStopNestedScroll(Điều phối viênLayout điều phốiLayout, V con, Xem mục tiêu) {
if (child.getTop() == mMinOffset) {
setStateInternal(STATE_EXPANDED);
return;
}
if (target != mNestedScrollingChildRef.get() || !mNestedScrolled) {
return;
}
int hàng đầu;
int targetState;
nếu (mLastNestedScrollDy > 0) {
//top = mMinOffset;
// targetState = STATE_EXPANDED;
int currentTop = child.getTop();
if (currentTop > mAnchorPoint) {
top = mAnchorPoint;
targetState = STATE_ANCHOR_POINT;
}
khác {
top = mMinOffset;
targetState = STATE_EXPANDED;
}
} else if (mHideable && ShouldHide(child, getYVelocity())) {
top = mParentHeight;
targetState = STATE_HIDDEN;
} khác nếu (mLastNestedScrollDy == 0) {
int currentTop = child.getTop();
if (Math.abs(currentTop - mMinOffset) < Math.abs(currentTop - mMaxOffset)) {
top = mMinOffset;
targetState = STATE_EXPANDED;
} khác {
top = mMaxOffset;
targetState = STATE_COLLAPSED;
}
} khác {
//top = mMaxOffset;
// targetState = STATE_COLLAPSED;
int currentTop = child.getTop();
if (currentTop > mAnchorPoint) {
top = mMaxOffset;
targetState = STATE_COLLAPSED;
}
khác {
top = mAnchorPoint;
targetState = STATE_ANCHOR_POINT;
}
}
if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
setStateInternal(STATE_SETTLING);
ViewCompat.postOnAnimation(child, new SettleRunnable(child, targetState));
} khác {
setStateInternal(targetState);
}
mNestedScrolled = false;
}
chung kết void setState(@State int state) {
if (trạng thái == mState) {
return;
}
nếu (mViewRef == null) {
// Chế độ xem chưa được trình bày; sửa đổi mState và để onLayoutChild xử lý nó sau
/**
* Hành vi mới (đã thêm: trạng thái == STATE_ANCHOR_POINT ||)
*/
if (trạng thái == STATE_COLLAPSED || trạng thái == STATE_EXPANDED ||
trạng thái == STATE_ANCHOR_POINT ||
(mHideable && state == STATE_HIDDEN)) {
mState = trạng thái;
}
return;
}
V con = mViewRef.get();
nếu (con == null) {
return;
}
int hàng đầu;
if (trạng thái == STATE_COLLAPSED) {
top = mMaxOffset;
} khác nếu (trạng thái == STATE_ANCHOR_POINT) {
top = mAnchorPoint;
} khác nếu (trạng thái == STATE_EXPANDED) {
top = mMinOffset;
} else if (mHideable && state == STATE_HIDDEN) {
top = mParentHeight;
} khác {
ném IllegalArgumentException mới ("Đối số trạng thái không hợp lệ: " + state);
}
setStateInternal(STATE_SETTLING);
if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
ViewCompat.postOnAnimation(child, new SettleRunnable(child, state));
}
}
tĩnh công khai BottomSheetBehaviorGoogleMapsLike from(V view) {
Thông số ViewGroup.LayoutParams = view.getLayoutParams();
if (!(params instanceof CoorderLayout.LayoutParams)) {
ném IllegalArgumentException mới ("Chế độ xem không phải là con của Điều phối viênLayout");
}
Hành vi điều phối viênLayout.Behavior = ((Điều phối viênLayout.LayoutParams) thông số)
.getBehavior();
if (!(ví dụ hành vi của BottomSheetBehaviorGoogleMapsLike)) {
ném IllegalArgumentException mới (
"Chế độ xem không được liên kết với BottomSheetBehaviorGoogleMapsLike");
}
trả về hành vi (BottomSheetBehaviorGoogleMapsLike);
}
Bạn thậm chí có thể sử dụng Behavior.setBottomSheetCallback(bottomSheetBehaviorGoogleMapsLike.BottomSheetCallback() mới {....
gọi lại
这是它的样子:
Về android - Vuốt BottomSheet như Google Maps, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/34310530/
tờ rơi: thư viện JavaScript bản đồ tương tác mã nguồn mở và thân thiện với thiết bị di động Tài liệu tiếng Trung: https://leafletjs.cn/reference.html Trang web chính thức (tiếng Anh): ht
Tôi là một lập trình viên xuất sắc, rất giỏi!