Android 实现长按连续加减数据

149 阅读1分钟

介绍

项目需求中实现,点击加号增加天数,点减号减天数,并且长按实现连续增减

代码实现

监听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}天"
                }
            }
        }
    }