1,绑定控件,设置触发事件
View gain_set_sub_6 = findViewById(R.id.gain_set_sub_6); gain_set_sub_6.setOnTouchListener((v, event) -> { if(event.getAction() == MotionEvent.ACTION_DOWN){ updateAddOrSubtract(v.getId()); //手指按下时触发不停的发送消息 }else if(event.getAction() == MotionEvent.ACTION_UP){ stopAddOrSubtract(); //手指抬起时停止发送 } return true; });
2,开启线程
private ScheduledExecutorService scheduledExecutor; private void updateAddOrSubtract(int viewId) { final int vid = viewId; if(scheduledExecutor==null) { scheduledExecutor = Executors.newSingleThreadScheduledExecutor(); scheduledExecutor.scheduleWithFixedDelay(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = vid; handler.sendMessage(msg); } }, 0, 100, TimeUnit.MILLISECONDS); //每间隔100ms发送Message } } private void stopAddOrSubtract() { if (scheduledExecutor != null) { scheduledExecutor.shutdownNow(); scheduledExecutor = null; } }
3,实现hander函数,在这里添加需要做的处理
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int viewId = msg.what; switch (viewId) { case R.id.gain_set_sub_6: { if (gain_value >= 60) gain_value = gain_value - 60; gain_set_value.setText(String.format("%.1fmm", gain_value / 10.0f)); } default: break; } } };