在Android开发中,我们经常会遇到这样一个问题:一个Button去控制一个TextView中的数值的变化,当单击Button时,数值加一;当长按Button时,数值持续增加。这篇文章就是解决这样的问题。
简单说一下思路。
1. 使用Button的OnTouchListener接口,当Button被点击的时候(ACTION_DOWN),记录Button被点击时的时间downTime。然后开启while循环,每循环一次,记录一次当前时间thisTime。
2. 判断thisTime-downTime的差值,比如需要长按500毫秒执行长按方法,那么当差值>=500的时候,执行需要的长按方法。
3. 当手指从Button抬起的时候,如果thisTime-downTime差值小于500毫秒的,则认为执行单击操作。
4. 最后使用Handler更新TextView中的值。
long downTime = 0;//Button被按下时的时间
long thisTime = 0;//while每次循环时的时间
boolean onBtnTouch = false;//Button是否被按下
int tvValue = 0;//TextView中的值
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
tvValue = Integer.parseInt(textView.getText().toString());
downTime = System.currentTimeMillis();
onBtnTouch = true;
Thread t= new Thread() {
@Override
public void run() {
while (onBtnTouch) {
thisTime = System.currentTimeMillis();
if (thisTime - downTime >= 500) {
tvValue++;
Message msg = handler.obtainMessage();
msg.arg1 = tvValue;
handler.sendMessage(msg);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t.start();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
onBtnTouch = false;
if (thisTime - downTime < 500) {
tvValue++;
Message msg = handler.obtainMessage();
msg.arg1 = tvValue;
handler.sendMessage(msg);
}
} else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
onBtnTouch = false;
}
return false;
}
});
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(String.valueOf(msg.arg1));
}
};
以上就是整个实现的思路和代码,希望对你有所帮助。