一个上拉抽屉的控件,不多说,直接看吧
首先,导入依赖
implementation 'top.iwill.mylib:slideuplayout:1.0.1'
使用说明
1、 添加布局文件
第一个儿童布局为正常布局(LinearLayout中布局1),第二个为上拉布局(的LinearLayout布局2)。正常请立即获取iTunes预览
布局2的第一个默认为上拉的控件,不能消费onTouch事件。如果需要全局拖动,设置应用:childDraggable = “真”如果上拉布局(布局2)包含一个列表视图/ recyclerview /滚动视图,需要设置childDraggable为真并在顶部的时候不消费onTouch事件,就可以衔接上滑动了。
<?xml version="1.0" encoding="utf-8"?>
<top.iwill.slideuplayout.SlideUpLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:separatePercent="50"
app:topMargin="100dp"
app:showHeight="120dp"
app:childDraggable="true"
tools:context=".MainActivity">
<!--LinearLayout布局1-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--LinearLayout布局2-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorPrimary">
<ImageView
android:id="@+id/header"
android:layout_width="match_parent"
android:src="@drawable/ic_launcher_background"
android:layout_height="100dp"/>
<ListView
android:id="@+id/listview"
android:alpha="0.5"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</top.iwill.slideuplayout.SlideUpLayout>
2、属性
app:showHeight 未展开状态下布局展示高度(dimension)
app:showPercent 未展开状态下布局展示百分比(float),和showHeight一样的,不过这 个是百分比,适合在预览的时候查看全部布局
app: = topMargin 完全展开状态,上滑布局顶部距离父布局顶部的距离(dimension)
app:separatePercent 判断是该自动上滑到展开状态还是自动下滑到未展开状态的百分比。100是完全展开位置,0是未展开的默认位置。float∈[0,100]。注意如果不设置则不会自动上滑或者下滑。
app:childDraggable 是否子布局可以响应滑动(Boolean)。默认false
3.接口
interface MoveProgressListener {
/**
* 滑动进度监听,有可能大于1
*/
fun onMove(progress: Float)
/**
* 释放时间,不再触摸
*/
fun onRelease(child: View)
/**
* 滑动到顶部
*/
fun onSlideToTop(child: View)
/**
* 滑动到底部
*/
fun onSlideToBottom(child: View)
}
Java的:
用setMoveProgressListener(listener:MoveProgressListener)进行监听注册
Kotlin(回调方法可选):
content.registerProgressListener {
onMove {
}
onRelease{
}
onSlideToTop{
}
onSlideToBottom{
}
}
到这里就结束了,用起来很简单。可是存在一定的局限性,如果第一个布局也是需要滑动的话。可能会引起事件冲突。需要自行解决一下。
最后奉上github地址:https://github.com/btcw/SlideUpLayout