如果我想让OnTouch事件自行重演,最佳解决方案是什么? 例如,如果我将手指放在屏幕上,我希望整数增加1,直到我将手指从屏幕上移开?Android - OnTouch重复动作
编辑:感谢您的回复:) 我可以用类似的方式处理画布吗?
如果我想让OnTouch事件自行重演,最佳解决方案是什么? 例如,如果我将手指放在屏幕上,我希望整数增加1,直到我将手指从屏幕上移开?Android - OnTouch重复动作
编辑:感谢您的回复:) 我可以用类似的方式处理画布吗?
创建一个计时器,计划每秒运行一次。保持运行,并在每次运行时增加计数器。手指松开时停止计时器。
结帐MotionEvent.ACTION_DOWN
,并在这里计数。 MotionEvent.ACTION_UP
停止你的柜台。
扩展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;
}
}
但不OnTouchListener当只有被调用变化?就像我移动手指的字词或下划线一样?所以在任何动作发生之前它都不会达到if(flag)? – Araw 2012-03-23 12:32:13
检查更新是否无效。 – noob 2012-03-23 13:09:59