我正在尝试一个小项目,我在其中使用使用运动事件的 ontouch 侦听器。每次我在屏幕上移动手指时,都会播放不同的声音。哪个工作完美,没有任何问题。现在我正在尝试执行另一个过程 - 当我在停止移动后立即长按屏幕(不移除我的手指)时 - 我需要打开另一个新活动。因此,我试图使用 onlongpress 事件,但 onlongpress 似乎不起作用——因为我相信 OnTouchListener 和 SimpleOnGestureListener 不能很好地结合在一起。只有这些作品 - touchlistner 或 SimpleonGesture?
因此,我不使用长按,而是使用倒数计时器来尝试自己的逻辑。检查 oldmove 和 newmove 是否相等(x 和 y 值相同,例如 2 秒),如果是则触发新活动。逻辑工作完美,但问题是即使在活动打开后 - 相同的活动会一次又一次地打开。不知道为什么?
我还尝试在计数器开始之前取消计数器踏板 - 发生的结果是结果出来晚了 - 我的意思是 2 秒它需要 10 秒但一次又一次出现两次或三次。
OnTouchListener MyOnTouchListener= new OnTouchListener()
{
public boolean onTouch(View view, final MotionEvent event)
{
switch(event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
x = (int) event.getX();
y = (int) event.getY();
down = x+y;
break;
case MotionEvent.ACTION_MOVE:
{
int move= (int) (event.getX() + event.getY());
if(Math.abs(down-move)>125 && Math.abs(down-move)<300 )
{
if(counter!=null)
{
counter.cancel();
}
if(longpressCount==1)
{
soundPool.play(id1, 1f, 1f, 1, 0, 1f);
try
{
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
else if(longpressCount==2)
{
soundPool.play(id2, 1f, 1f, 1, 0, 1f);
try
{
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
else if(longpressCount==3)
{
soundPool.play(id3, 1f, 1f, 1, 0, 1f);
try
{
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
else if(longpressCount==4)
{
soundPool.play(id4, 1f, 1f, 1, 0, 1f);
try
{
Thread.sleep(500);
} catch (InterruptedException e) {
}
longpressCount = 0;
}
down = (int) (event.getX() + event.getY());
move1 = (int) (event.getX() + event.getY());
longpressCount++;
}
else if((Math.abs(move1-move))<20)
{
Log.e("STARTING COUNTER", "");
counter = new CountDownTimer(2000, 2000)
{
int mold =(int) (event.getX() + event.getY());
public void onFinish()
{
int mnew = (int) (event.getX() + event.getY());
if(Math.abs(mold-mnew)<30)
{
Log.e("Current longpressCount", longpressCount+"");
}
}
@Override
public void onTick(long millisUntilFinished)
{
}
}.start();
}
break;
}
}
return true;
}
};
你认为问题是什么?我无法实现我的逻辑?