一、最终效果
说在最前:
本例不包含任何第三方库,不集成任何轮子,全部使用Android自带的UI组件和标准事件。
滑动方向可任意修改,滑动效果可放置在任何View组件上。
先来看最终效果,下图左侧的蓝色就是向左滑动后的view,而右侧的三个按钮就是滑动后显示出来的操作按钮:
二、思路
1.利用FrameLayout的布局顺序效果,后布局的元素会遮挡先前布局的元素
2.使用一个CardView容器,将FrameLayout及其中的遮挡层、下方的操作按钮等全部都放在这个CardView容器中,形成一个整体组件
3.使用View的基本事件:
- OnLongClickListener
- OnTouchListener
要注意的是,如果只实现OnTouchListener,而不实现OnLongClickListener,是无法触发滑动效果的。
扫描二维码关注公众号,回复:
15975873 查看本文章
三、UI布局
先来看一下整个UI布局的层次结构:
忽略那些警告吧...
在最外层,我们使用一个CardView来作为容器在这个CardView里面,放入一个FrameLayout布局,并且使这个FrameLayout的宽度和高度撑满CardView。
在FrameLayout的下一层,有两个LinearLayout布局,这里会出现第一个需要注意的地方,由于FrameLayout的特性,后加入的LinearLayout会遮挡先加入的。
因此,先加入的LinearLayout中,放置了一个TextView,用来挤占位置,之后放置三个按钮,这三个按钮就是左滑露出来的操作按钮。
而后加入的LinearLayout里,由于本例不涉及什么业务,因此只是把它设置了一个明亮的蓝色,以便观察。
<androidx.cardview.widget.CardView
android:id="@+id/CARD_VIEW_EFFECT"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/TEXT_VIEW_TITLE" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/LINEAR_LAYOUT_DASHBOARD"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/textView5"
android:layout_width="