Android에서 게임을 만들고있어 사용자가 화면을 길게 누르려고 할 때 특정 작업을 수행해야합니다. 불행히도 사용자 지정 SurfaceView와 직접 작동하는 메서드를 찾지 못했습니다. 그런 메서드가 있는지 알려주시겠습니까? :)화면에서 길게 터치 (안드로이드)
그래서 나는 onTouch 이벤트 수신기에서 장시간 터치 감지를 구현하기로 결정했습니다.
여기 내 코드입니다 :
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
}else if (event.getAction() == MotionEvent.ACTION_UP)
{
//stop timer
touchDuration = System.currentTimeMillis() - touchTime;
if (touchDuration < 800)
{
onShortTouch(event,touchDuration);
}else
{
onLongTouch(event,touchDuration);
}
}
}
return true;
이 작동하지만, 언론이 길게 누르면 않았거나하지 않을 경우 사용자가 전화 접촉을 중지하는 경우에만 나는 감지 할 수 있습니다. 그래서 내가 원하는 것만은 아닙니다. 사용자가 처음 화면을 터치 할 때 타이머가 시작되고 800 밀리 초가 지나면 LongTouch() 메서드가 호출되는 것을 선호합니다. 다시 말해 ACTION_DOWN 이후 ACTION_UP이 경과 한 시간을 확인하지 않아도됩니다. 내가 말한 타이머에 대한 스레드를 사용해야한다고 생각하지만 그것을 작동하게 만들 수 없습니다. 다음 코드를 사용하면 화면을 터치하자마자 디버그 메시지가 표시됩니다.
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
TouchThread touchThread = new TouchThread();
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
touchThread.setEvent(event);
touchThread.run();
}
return true;
}
private class TouchThread extends Thread
{
public MotionEvent event = null;
public void setEvent(MotionEvent e)
{
event = e;
}
@Override
public void run()
{
long startTime = System.currentTimeMillis();
long time = 0;
while(event.getAction() == MotionEvent.ACTION_DOWN)
{
time = System.currentTimeMillis() - startTime;
if(time > 800)
{
System.out.println("LOOONG CLICK!!");
return;
}
}
}
}
누구 아이디어가 있습니까? 다른 해결책도 환영합니다.
감사합니다. , http://developer.android.com/reference/android/view/GestureDetector.html
내가 생성자에 GestureDetector 인스턴스를 만드는 것입니다 사용 방법, 내가 관심이 방법을 구현 :