-
-
Notifications
You must be signed in to change notification settings - Fork 58
侧滑菜单
angcyo edited this page May 12, 2020
·
1 revision
版本2.4.0
之后, 支持左/右
侧滑菜单.
SwipeMenuHelper.install(recyclerView)
<ViewGroup>
<ViewGroup>
<!--菜单布局, 必须放在index=0的位置-->
</ViewGroup>
<ViewGroup>
<!--内容层-->
</ViewGroup>
...
</ViewGroup>
注意:对布局的
唯一要求就是, 必须包含2
个及以上的view
.且不要使用Gravity
margin
等定位属性. 默认FrameLayout
布局定位即可.
在DslAdapterItem
的onItemBind
方法中, 自行addView
removeView
集合, 点击事件处理和普通view
一致.
库中提供了扩展方法, 用于ViewGroup
添加DslAdapterItem
的支持.
使用方法:
itemHolder.group(R.id.menu_wrap_layout)?.resetDslItem(listOf(DslAdapterItem(), DslAdapterItem(), DslAdapterItem()))
DslAdapterItem
侧滑相关属性:
/**用于控制打开or关闭菜单*/
var _itemSwipeMenuHelper: SwipeMenuHelper? = null
/**是否激活侧滑菜单.需要[SwipeMenuHelper]的支持*/
var itemSwipeMenuEnable = true
/**支持滑动菜单打开的手势方向.
* [ItemTouchHelper.LEFT]
* [ItemTouchHelper.RIGHT]
* */
var itemSwipeMenuFlag = ItemTouchHelper.LEFT
/**滑动菜单滑动的方式*/
var itemSwipeMenuType = SWIPE_MENU_TYPE_DEFAULT
如果不喜欢库中的侧滑效果, 可以自行实现itemSwipeMenuTo
方法:
库中的默认实现如下:
open fun onItemSwipeMenuTo(itemHolder: DslViewHolder, dX: Float, dY: Float) {
val parent = itemHolder.itemView
if (parent is ViewGroup && parent.childCount > 1) {
//菜单最大的宽度, 用于限制滑动的边界
val menuWidth = itemSwipeWidth(itemHolder)
val tX = clamp(dX, -menuWidth.toFloat(), menuWidth.toFloat())
parent.forEach { index, child ->
if (index == 0) {
if (itemSwipeMenuType == SWIPE_MENU_TYPE_FLOWING) {
if (dX > 0) {
child.translationX = -menuWidth + tX
} else {
child.translationX = parent.mW() + tX
}
} else {
if (dX > 0) {
child.translationX = 0f
} else {
child.translationX = (parent.mW() - menuWidth).toFloat()
}
}
} else {
child.translationX = tX
}
}
}
}