compose统一封装点击事件,并拦截快速点击

364 阅读1分钟

用法

Image(    painter = painterResource(id = R.drawable.ic_back),    contentDescription = null,    modifier = Modifier        .padding(start = 10.dp)        .clickable{            showToast("点击")        }        .size(25.dp)        .align(Alignment.CenterStart), )

获取到上层clickable的 typeName和这次是否一样,两次点击调用的函数一样并且时间小于2000毫秒属于快速点击,在此拦截

封装代码:

var lastClickTime:Long = 0var typeName = ""fun Modifier.clickable(        click:() -> Unit):Modifier {    return this.then(            clickable(                    interactionSource = MutableInteractionSource(),                    indication = null            ){                val time = System.currentTimeMillis()                if (typeName == click.javaClass.typeName.toString() && time - lastClickTime < 2000){                    Log.d(" Modifier.clickable","点快了!")                    return@clickable                }                lastClickTime = time                typeName = click.javaClass.typeName.toString()                click()            }    )}