モーションイベントを使用する ontouch リスナーを使用する小さなプロジェクトを試しています。画面上で指を動かすたびに、異なるサウンドが再生されます。これは問題なく完全に機能します。今、私は別のプロセスを実行しようとしています-移動を停止した直後に(指を削除せずに)画面を長押しすると、別の新しいアクティビティを開く必要があります。したがって、onlongpress イベントを使用しようとしていましたが、onlongpress が機能していないようでした。OnTouchListener と SimpleOnGestureListener がうまく連携しないと信じているためです。これらの唯一の作品で - touchlistner または SimpleonGesture?
したがって、長押しではなくカウントダウンタイマーを使用して、独自のロジックを試しました。oldmove と newmove が等しいかどうかを確認します (x と y の値は、たとえば 2 秒間同じです)。そうであれば、新しいアクティビティをトリガーします。ロジックは完璧に機能しますが、アクティビティが開かれた後でも、同じアクティビティが何度も開かれるという問題があります。なぜかわからない?
また、カウンターが始まる前にカウンタートレッドをキャンセルしようとしました-結果が遅くなるということです-代わりに2秒で10秒かかりますが、2回または3回何度も来ます。
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;
}
};
問題は何だと思いますか?私は私のロジックを達成することができませんか?