介绍
项目需求中实现,点击加号增加天数,点减号减天数,并且长按实现连续增减
代码实现
监听OnTouchListener方法,手指按下开始之前循环操作,抬起时结束
btn_add.setOnTouchListener { _, event ->
//若控件在srcollview需要添加不允许拦截事件,防止手指抖动触发ACTION_CANCEL后不会再触发ACTION_UP
scrollView.requestDisallowInterceptTouchEvent(true)
when (event.action) {
MotionEvent.ACTION_DOWN -> {
updateAddOrSubtract(MSG_ADD)//手指按下触发发送消息
}
MotionEvent.ACTION_UP -> {
stopAddOrSubtract()
}
}
true
}
创建线程池ScheduledExecutorService,执行循环任务。
private fun updateAddOrSubtract(flag: Int) {
mScheduledExecutors = Executors.newSingleThreadScheduledExecutor()
mScheduledExecutors!!.scheduleWithFixedDelay({
var msg = Message()
msg.what = flag
mHandler.sendMessage(msg)
}, 0, 100, TimeUnit.MILLISECONDS)
}
private fun stopAddOrSubtract() {
if (mScheduledExecutors != null) {
mScheduledExecutors!!.shutdownNow()
mScheduledExecutors = null
}
}
在handler中更新ui
private val mHandler = object : Handler() {
override fun handleMessage(msg: Message) {
when (msg.what) {
MSG_ADD -> {
tv_day.text = "${++mDay}天"
}
MSG_SUBTRACT -> {
if (mDay <= 0) return
tv_day.text = "${--mDay}天"
}
}
}
}