Android 安卓中的onLongpress
我正在尝试一个小项目,我使用ontouch listener,它使用运动事件。每次我在屏幕上移动手指,都会播放不同的声音。它可以完美地工作,没有任何问题。现在我正在尝试做另一个过程——当我停止移动而不删除fingure后立即长按屏幕时——我需要打开另一个新的活动。因此,我尝试使用onlongpress事件,但onlongpress似乎不起作用,因为我相信OnTouchListener和SimpleOnGestureListener不能很好地结合在一起。只有这一个作品——touchlistner还是SimpleNon 因此,我尝试了自己的逻辑,不使用长按,而是通过倒计时。检查oldmove和newmove是否相等,x和y值是否相同(例如2秒),如果是,则触发新活动。逻辑工作得很完美,但问题是即使在活动被打开之后,相同的活动也会被一次又一次地打开。不知道为什么 我还试着在计数器启动前取消计数器踏板-结果出来晚了-我的意思是2秒,它需要10秒,但会一次又一次地出现两到三次Android 安卓中的onLongpress,android,ontouchlistener,Android,Ontouchlistener,我正在尝试一个小项目,我使用ontouch listener,它使用运动事件。每次我在屏幕上移动手指,都会播放不同的声音。它可以完美地工作,没有任何问题。现在我正在尝试做另一个过程——当我停止移动而不删除fingure后立即长按屏幕时——我需要打开另一个新的活动。因此,我尝试使用onlongpress事件,但onlongpress似乎不起作用,因为我相信OnTouchListener和SimpleOnGestureListener不能很好地结合在一起。只有这一个作品——touchlistner还
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;
}
};
你认为问题是什么?我无法实现我的逻辑?我不理解您的代码。为什么要求x坐标和y坐标的和?这样我就可以区分条件的新旧值。是的,但要将x坐标和y坐标相加。难道你不应该计算旧的X和新的X之间的差值吗?Y的X和Y的X与其他坐标分开计算吗?是的。我也在做同样的事情,我正在做的是同时添加X和Y,把它们放在down和move的X和Y值中,然后将它们添加到move中,我不懂你的代码。为什么要求x坐标和y坐标的和?这样我就可以区分条件的新旧值。是的,但要将x坐标和y坐标相加。难道你不应该计算旧的X和新的X之间的差值吗?Y的X和Y的X与其他坐标分开计算吗?是的。我也在做同样的事情,我现在做的是把X和Y加起来,把它们放在down和move的X和Y值加起来,放在move中