Skip to content

Item选中事件

angcyo edited this page Dec 12, 2019 · 2 revisions

DslTabLayout点击事件, 由DslSelector组件完成.

可以用过DslTabLayout的属性tabLayoutConfig配置, tabLayoutConfig内部已有默认实现赋值, 亦可修改.

DslTabLayoutConfig继承DslSelectorConfig.

DslSelectorConfig 配置项

/**
 * Dsl配置项
 * */
open class DslSelectorConfig {

    /**
     * 用来初始化[itemView]的样式
     * [onSelectItemView]
     * */
    var onStyleItemView: (itemView: View, index: Int, select: Boolean) -> Unit =
        { _, _, _ ->

        }

    /**
     * 选中[View]改变回调
     * @param fromView 单选模式下有效, 表示之前选中的[View]
     * @param reselect 是否是重复选择, 只在单选模式下有效
     * */
    var onSelectViewChange: (fromView: View?, selectViewList: List<View>, reselect: Boolean) -> Unit =
        { _, _, _ ->

        }

    /**
     * 选中改变回调
     * [onSelectViewChange]
     * @param fromIndex 单选模式下有效, 表示之前选中的[View], 在可见性[child]列表中的索引
     * */
    var onSelectIndexChange: (fromIndex: Int, selectIndexList: List<Int>, reselect: Boolean) -> Unit =
        { fromIndex, selectList, reselect ->
            "选择:[$fromIndex]->${selectList} reselect:$reselect".logi()
        }

    /**
     * 当需要选中[itemView]时回调, 返回[true]表示拦截默认处理
     * @param itemView 操作的[View]
     * @param index [itemView]在可见性view列表中的索引. 非ViewGroup中的索引
     * @param select 选中 or 取消选中
     * @return true 表示拦截默认处理
     * */
    var onSelectItemView: (itemView: View, index: Int, select: Boolean) -> Boolean =
        { _, _, _ ->
            false
        }
}

onSelectItemView就是child的选中回调.

DslTabLayoutConfig 配置项

DslTabLayoutConfigDslSelectorConfig上, 增加了对child的控制.

比如, 颜色配置, 滑动配置等.

/**是否开启文本颜色*/
var tabEnableTextColor = true
    set(value) {
        field = value
        if (field) {
            tabEnableIcoColor = true
        }
    }
/**是否开启颜色渐变效果*/
var tabEnableGradientColor = false
    set(value) {
        field = value
        if (field) {
            tabEnableIcoGradientColor = true
        }
    }
/**选中的文本颜色*/
var tabSelectColor: Int = Color.WHITE //Color.parseColor("#333333")
/**未选中的文本颜色*/
var tabDeselectColor: Int = Color.parseColor("#999999")
/**是否开启Bold, 文本加粗*/
var tabEnableTextBold = false
/**是否开启图标颜色*/
var tabEnableIcoColor = true
/**是否开启图标颜色渐变效果*/
var tabEnableIcoGradientColor = false
/**选中的图标颜色*/
var tabIcoSelectColor: Int = NO_COLOR
    get() {
        return if (field == NO_COLOR) tabSelectColor else field
    }
/**未选中的图标颜色*/
var tabIcoDeselectColor: Int = NO_COLOR
    get() {
        return if (field == NO_COLOR) tabDeselectColor else field
    }
/**是否开启scale渐变效果*/
var tabEnableGradientScale = false
/**最小缩放的比例*/
var tabMinScale = 0.8f
/**大嘴缩放的比例*/
var tabMaxScale = 1.2f
var tabGradientCallback = TabGradientCallback()

具体可以参考源码.

大致使用代码

val dslTabLayout = viewHolder.v<DslTabLayout>(R.id.tab_layout)
dslTabLayout.configTabLayoutConfig {
    //选中view的回调
    onSelectViewChange = { fromView, selectViewList, reselect ->
        val toView = selectViewList.first()
        if (reselect) {
            //重复选择
        }
    }
    //选中index的回调
    onSelectIndexChange = { fromIndex, selectIndexList, reselect ->
        val toIndex = selectIndexList.first()
    }
}
You can’t perform that action at this time.