Android左滑删除,自定义左滑删除控件

左滑显示更多,或配套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方法对子控件进行重新布局将内容区域放在左侧显示位,将按钮区域放置于右侧折叠位,具体代码实现可下载代码仓库进行查看学习。

猜你喜欢

转载自blog.csdn.net/qq_35644925/article/details/126118985