1 簡介
AndroidSlidingUpPanel 可向上拖動的view
官方展示:
2 使用
2.1 添加依賴
repositories {
mavenCentral()
}
implementation 'com.sothree.slidinguppanel:library:3.4.0'
2.2 用法
com.sothree.slidinguppanel.SlidingUpPanelLayout
作爲根佈局。- 根佈局必須
gravity
設置爲top
或bottom
。 - 確保它有兩個子view。第一個子view是您的主要佈局。第二個子view是您上滑面板的佈局。
- 主佈局的寬度和高度應設置爲
match_parent
。 - 滑動佈局 tv1 的寬度應設置爲
match_parent
,高度應設置爲match_parent
,wrap_content
或 android:maxWidth="xxdp"。如果您想將主界面和slidingUpPanel按比例顯示於屏幕,請將其設置爲match_parent,並使用
layout_weight
爲 SlidingUpPanelLayout 定義一個屬性。 - 默認情況下,整個面板將充當拖動區域並攔截點擊和拖動事件。您可以使用
setDragView
方法或umanoDragView
屬性將拖動區域限制爲特定View。
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:textSize="16sp" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:text="The Awesome Sliding Up Panel"
android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
2.3 ActionBarOverlay
如果當向上滑動的時候actionbar也是跟着慢慢隱藏的,這種效果必須使用ActionBarOverlay:
<style name="AppTheme">
<item name="android:windowActionBarOverlay">true</item>
</style>
同時這種情況你需要爲 根佈局 的 頂部 設置 margintop 爲actionbar的高度,來支持較舊的API版本?android:attr/actionBarSize
or attr/actionBarSize
2.4 注意事項,其他功能和自定義
- 如果您使用的是Custom
umanoDragView
,則面板會將click事件傳遞到主佈局。進行第二種佈局clickable
以防止這種情況。 - 您可以使用
setPanelHeight
方法或umanoPanelHeight
屬性來更改面板高度。 - 如果要隱藏滑動面板上方的陰影,請將
shadowHeight
attribute 設置爲0。 - 使用
setEnabled(false)
完全禁用滑動面板(包括觸摸和滑動編程) - 使用
setTouchEnabled(false)
以禁用面板的觸摸響應(拖動和點擊),你仍然可以控制面板編程 - 使用
getPanelState
來獲得當前面板狀態 - 使用
setPanelState
設置當前面板狀態 - 您可以通過設置
umanoParallaxOffset
屬性將視差添加到主視圖(有關示例,請參見演示)。 - 您可以在屏幕中間設置錨點,
setAnchorPoint
用於允許面板處於中間展開狀態(類似於Google Maps)。 - 您可以將設置
PanelSlideListener
爲監視有關滑動窗格的事件。 - 您還可以通過
layout_gravity
將佈局的屬性更改爲來使面板從頂部滑動top
。 - 您可以通過設置
umanoScrollInterpolator
屬性爲面板移動提供滾動插值器。例如,如果您想要面板的反彈或超調效果。 - 默認情況下,面板上推主要內容。您可以使用
setOverlayed
方法或umanoOverlay
屬性使其覆蓋主要內容。如果您想使滑動佈局半透明,這將很有用。您也可以設置umanoClipPanel
爲false以在非覆蓋模式下使面板透明。 - 默認情況下,面板向上滑動時,主要內容顯示爲灰色。您可以通過更改來更改暗色
umanoFadeColor
。將其設置爲"@android:color/transparent"
完全消除變暗。
2.5 嵌套滑動問題
如果有嵌套滑動問題,請確保umanoScrollableView
將面板上的屬性設置爲 umanoScrollableView
。該組件支持ListView
,ScrollView
以及RecyclerView
,但是你可以通過設置自定義添加任何類型的可滾動視圖的支持ScrollableViewHelper
。這是一個例子NestedScrollView
public class NestedScrollableViewHelper extends ScrollableViewHelper {
public int getScrollableViewScrollPosition(View mScrollableView, boolean isSlidingUp) {
if (mScrollableView instanceof NestedScrollView) {
if(isSlidingUp){
return mScrollableView.getScrollY();
} else {
NestedScrollView nsv = ((NestedScrollView) mScrollableView);
View child = nsv.getChildAt(0);
return (child.getBottom() - (nsv.getHeight() + nsv.getScrollY()));
}
} else {
return 0;
}
}
}
定義好以後,使用 androidSlidingUpPanel.setScrollableViewHelper
該庫最初基於Android支持庫r13中開源的SlidingPaneLayout組件
3 demo以及效果圖
demo
效果圖: