[英]Android ontouchlistener counter implementation
I have set ontouch listener to implement a counter for my imagebutton. 我已经设置了ontouch监听器来为我的imagebutton实现一个计数器。 But I can only detect button being touched and release.
但是我只能检测到按钮被触摸并释放。 I am not sure how to implement incrementing as long as the button is pressed and how to stop it after it is released.
我不确定只要按下按钮就如何执行递增操作,释放按钮后如何停止递增操作。 Following is the code I have:
以下是我的代码:
up.setOnTouchListener(new OnTouchListener() { up.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
pressdown();
}
else if (event.getAction()==MotionEvent.ACTION_UP) {
pressrelease();
}
return true;
}
Ok. 好。 Here's a solution to my own question.
这是我自己的问题的解决方案。 It might help someone else.
它可能会帮助别人。
use a Handler object because you have to implement a separate thread for incrementing/decrementing 使用Handler对象,因为您必须实现一个单独的线程来进行递增/递减
public class MainActivity extends Activity{
private boolean autoIncrement = false;
private boolean autoDecrement = false;
private final long REPEAT_DELAY = 50;
private Handler repeatUpdateHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
class RepetitiveUpdater implements Runnable{
@Override
public void run() {
if (autoIncrement) {
increment();
repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
}
else if(autoDecrement){
decrement();
repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
}
}
}
up.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
increment();
}
});
up.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
autoIncrement = true;
repeatUpdateHandler.post(new RepetitiveUpdater());
return false;
}
});
up.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_UP && autoIncrement ){
autoIncrement = false;
}
return false;
}
});
public void increment(){
if (i<100) {
i++;
TextView no = (TextView)findViewById(R.id.no);
no.setText(String.valueOf(i));
}
}
}
Do the same for decrement. 递减相同。
Courtesy: Github, author: Jeffrey F. Cole 礼貌:Github,作者:Jeffrey F. Cole
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.