【发布时间】:2012-03-23 12:09:20
【问题描述】:
如果我想让 OnTouch 事件重演,最好的解决方案是什么? 例如,如果我将手指放在屏幕上,我希望整数增加 1,直到我将手指从屏幕上移开?
编辑:感谢您的回复 :) 我可以用类似的方式来处理画布吗?
【问题讨论】:
标签: android multithreading asynchronous handler
如果我想让 OnTouch 事件重演,最好的解决方案是什么? 例如,如果我将手指放在屏幕上,我希望整数增加 1,直到我将手指从屏幕上移开?
编辑:感谢您的回复 :) 我可以用类似的方式来处理画布吗?
【问题讨论】:
标签: android multithreading asynchronous handler
创建一个计时器,计划每秒运行一次。保持它运行并在每次运行时增加你的计数器。松开手指时停止计时器。
【讨论】:
扩展ohdroid的答案:
您可以有一个 boolean 变量,在初始化时需要将其设置为 false。当MotionEvent.ACTION_DOWN 被调用时,将其设置为true 并将您的计数器增量代码放入一个if 块中,该块检查布尔变量的值作为条件。在 MotionEvent.ACTION_UP 中再次将值设置为 false。
代码示例:
View#setOnTouchListener(new OnTouchListner(){
int counter=0;
boolean flag=false;
public void onTouch(View view,MotionEvent event){
if(event==MotionEvent.ACTION_DOWN){
flag=true;
}
if(event==MotionEvent.ACTION_UP){
flag=false;
}
if(flag){
counter++;
}
}
});
编辑:如果上述代码不起作用,请尝试以下使用AsyncTask的代码:
boolean flag=false;
RunTask task=new RunTask();
int counter=0;
View#setOnTouchListener(new OnTouchListner(){
public void onTouch(View view,MotionEvent event){
if(event==MotionEvent.ACTION_DOWN){
flag=true;
task.execute(MyActivity.this);
}
if(event==MotionEvent.ACTION_UP){
flag=false;
task.cancel(true);
}
}
});
class RunTask extends AsyncTask<MyActivity,Integer, Integer>{
protected Integer doInBackground(MyActivity... params) {
while(params[0].flag)
counter++;
return counter;
}
}
【讨论】:
查看MotionEvent.ACTION_DOWN,并在此处数数。
MotionEvent.ACTION_UP 停止您的柜台。
【讨论】: