2017-04-17 17 views
1

내 앱에는 클릭 가능한 뷰가 있으며이 뷰를 클릭하면 handleClickEvent()를 호출해야합니다. 뷰에 OnClickListener를 설정하려고했지만 사용자가 뷰를 두 번 탭하면 handleClickEvent()가 두 번 호출됩니다. 두 번 탭하는 동안 두 번 호출되지 않도록하고 싶습니다. 나는. 한 번의 클릭 및 두 번 탭 모두 handleClickEvent()를 한 번 호출하면됩니다.안드로이드는 onSingleTapConfirmed를 사용하지 않고 두 번 살짝 누르기 위해 한 번 두 번 누르는 것을 피하십시오.

몇 가지 조사를하고이 질문을 발견했습니다. Android detecting double tap without single tap first 답변에서 제안 된 것을 시도했습니다. 즉, onSingleTapConfirmed() 메소드로 GestureDetector를 구현했습니다. 그게 효과가 있지만, 나는 응답 시간에 눈에 띄는 지연이 있음을 알았고, OnClickListener를 사용하는 것과 비교했다. onSingleTapConfirmed()는 특정 시간 동안 대기하여 시스템이 단일 탭임을 확인한 후에 만 ​​호출되기 때문에 가정합니다.

눈에 띄는 지연없이 이것을 달성하기위한 방법이 있습니까? 내가 생각할 수있는 또 다른 옵션은 lastClickedTimeStamp 멤버 변수를 갖는 것입니다. lastClickedTimeStamp와 함께 클릭 할 때 현재 시간을 비교하고, 어떤 임계 값 내에 있다면 아무 것도하지 않습니다.

다른 옵션이 있는지 궁금합니다.

감사합니다.

답변

2

나는 그것이 긴으로 상태 변수를 설정하면됩니다 및 timeOfLastTouch를 호출하고이 코드를 넣어 각각의 OnClickListener를 함수에서 다음 0으로 설정하는 방법과 자신의

long currentTime = System.currentTimeMillis(); 
if (timeOfLastTouch + 100 < currentTime) { 
    // code 
    timeOfLastTouch = System.currentTimeMillis(); 
} 
+0

감사합니다 해당보기

yourView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }); 

당신은 참조 할 수 있습니다에 터치 이벤트를 설정! 예, 나는 이것이 효과가있을 것이라고 생각합니다. 나는 그것을 할 수있는 무엇이 내장되어 있는지 궁금합니다. 그렇지 않다면이 접근법을 계속 진행할 것입니다. – HeyThere

0

당신은 GestureDetector.SimpleOnGestureListener를 사용하여 시도 할 수 있습니다 onTouchEvent와 결합하십시오.

private GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { 
    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     Log.d("SingleTap", " is detected"); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     Log.d("DoubleTap", " is detected"); 
     return true; 
    } 
}); 

다음, OnClickListener를 제거하고 Detecting Common Gestures

+0

질문에서 언급했듯이 이미이 방법을 시도했습니다. 그것은 작동하지만 사용자가 뷰를 클릭 할 때와 handleClickEvent()가 호출되는 사이에 눈에 띄는 지연이 있습니다. 따라서 가능한 경우 대체 접근법을 찾고 있습니다. 감사! – HeyThere

+0

내 잘못입니다. 위의 링크를 알지 못했습니다. 이 경우 handleClickEvent가 호출 될 때 뷰를 클릭 가능 (false)으로 설정하고 완료하면 참으로 설정하지 않는 이유는 무엇입니까? 그렇게 간단 해. –