左滑显示更多,或配套listView使用快速实现左滑删除布局
效果图
使用简单粗暴
仓库地址 GitHub - IHoveYou/LeftSlideView: 好用的左滑删除控件,支持左滑布局,支持直接预览
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.IHoveYou:LeftSlideView:v1.1'
}
LeftSlideHorizontalScrollView 为滑动控制View 继承自 HorizontalScrollView
LeftSlideView 控件内包裹2个任意View 左侧View为内容区域,右侧View为左滑显示区域
view 可以为任何类型 也可以是ViewGroup,自由度极高可放置任意布局
效果可直接预览
<com.example.leftslideview.LeftSlideHorizontalScrollView
android:scrollbars="none"
android:id="@+id/leftSlideHorizontalScrollView"
android:layout_width="match_parent"
android:fillViewport="true"
android:layout_height="40dp"
>
<com.example.leftslideview.LeftSlideView
android:id="@+id/leftSlideView"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:paddingHorizontal="15dp"
android:orientation="vertical"
android:layout_width="300dp"
android:layout_height="match_parent">
<TextView
android:gravity="center_vertical"
android:text="23333"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:id="@+id/llLeftSlidButton"
android:background="@color/teal_700"
android:layout_width="50dp"
android:layout_height="match_parent"/>
</com.example.leftslideview.LeftSlideView>
</com.example.leftslideview.LeftSlideHorizontalScrollView>
LeftSlideHorizontalScrollView 的API
/**
* 触摸回调
*/
interface MoveClickListener {
/**
* 移动中回调
* @param leftSlideHorizontalScrollView
* @param moveX x轴移动距离
*/
fun onMoveClickListener(leftSlideHorizontalScrollView: LeftSlideHorizontalScrollView?, moveX: Int)
/**
* 移动结束
* @param leftSlideHorizontalScrollView
* @param isRollOut 当前状态 true 展开 false 收起
*/
fun onUpClickListener(leftSlideHorizontalScrollView: LeftSlideHorizontalScrollView?, isRollOut: Boolean)
}
//设置滑动监听
void setMoveClickListener(MoveClickListener onListener);
//手动初始化布局 执行关闭无动画
void initScrollow();
//手动设置按钮展开状态 true 展开 false关闭
void setRollOut(boolen isRollOut)
//获取当前布局显示状态 展开状态 true 展开 false关闭
boolean getRollOut()
列表布局 左滑展开控制类 LeftSlideUtils
addView 添加需要联动的View 添加在一起的View 同时只能展开一个
实现原理
LeftSlideHorizontalScrollView 继承 HorizontalScrollView
监听用户手指移动事件 记录用户点击位置,移动方向,放开后移动距离计算得出是否展开
LeftSlideView 继承 ViewGrop
重写onMeasure方法 在方法内计算控件实际可用宽度,将内容布局宽度设置为实际宽度,获取右侧按钮布局宽度 ,实际可用位置+右侧可用宽度 = LeftSlideView实际整体宽度,配合LeftSlideHorizontalScrollView实现左右滑动,通过点击时获取按钮布局宽度计算展开、折叠动画。
重新LeftSlideView的onLayout方法对子控件进行重新布局将内容区域放在左侧显示位,将按钮区域放置于右侧折叠位,具体代码实现可下载代码仓库进行查看学习。