2012-02-27 2 views
3

Android에서 View.onLongClickListener()은 긴 클릭으로 처리하기 위해 약 1 초가 걸립니다. 긴 클릭에 대한 응답 시간은 어떻게 구성합니까?LongClick에 대한 응답 시간을 구성하는 방법은 무엇입니까?

+0

이 시간은 귀하의 활동이 아니라 ROM에 의해 정의 된 것으로 보입니다. – Huang

+1

이 문제를 해결할 수있는 아이디어. onLongClick Listener, btw의 응답 시간을 단축하고 싶습니다. 드래그/드롭 관련 활동에 사용합니다. – user1234817

+0

길게 누르기 작업에서 수행하려는 작업은 무엇입니까? –

답변

8

기본 시간 초과는 ViewConfiguration.getLongPressTimeout()으로 정의됩니다.

당신은 당신의 자신의 길게 누르면를 구현할 수 있습니다

boolean mHasPerformedLongPress; 
Runnable mPendingCheckForLongPress; 

@Override 
public boolean onTouch(final View v, MotionEvent event) { 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 

      if (!mHasPerformedLongPress) { 
        // This is a tap, so remove the longpress check 
        if (mPendingCheckForLongPress != null) { 
         v.removeCallbacks(mPendingCheckForLongPress); 
        } 
       // v.performClick(); 
      } 

      break; 
     case MotionEvent.ACTION_DOWN: 
      if(mPendingCheckForLongPress == null) { 
       mPendingCheckForLongPress = new Runnable() { 
        public void run() { 
         //do your job 
        } 
       }; 
      } 


      mHasPerformedLongPress = false; 
      v.postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout()); 

      break; 
     case MotionEvent.ACTION_MOVE: 
      final int x = (int) event.getX(); 
      final int y = (int) event.getY(); 

      // Be lenient about moving outside of buttons 
      int slop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop(); 
      if ((x < 0 - slop) || (x >= v.getWidth() + slop) || 
       (y < 0 - slop) || (y >= v.getHeight() + slop)) { 

       if (mPendingCheckForLongPress != null) { 
        v. removeCallbacks(mPendingCheckForLongPress); 
       } 
      } 
      break; 
     default: 
      return false; 
    } 

    return false; 
} 
+0

감사합니다. 나는 longClick 이벤트를 포기하고 MotionEvent를 사용한다. 사실, MotionEvent처럼 시작하기 때문에 longClick (API 11 이후에만)보다 훨씬 이전에 소개되었습니다. 그것은 더 많은 안드로이드 휴대폰에서 내 애플 리케이션을 쉽게합니다. 나는 자바/오라클이 초/milsec – user1234817

+0

"mHasPerformedLongPress"가 true로 설정되지 않은 간단한 para를 사용하여 longClick을 도입했으면 좋겠습니까? – wangqi060934

0

이 대답 할 말하지만 필요한 사람의 경우에있을 수있다.

휴대 전화가 루팅 된 경우 시간을 변경할 수 있습니다. 데이터베이스의 값을 원하는 시간 제한 값으로 설정하기 만하면됩니다. 이것은 시스템 전체의 긴 프레스 이벤트에 영향을줍니다.

디렉토리는 : settings.db

테이블 :

이름을 확보

파일이 /data/data/com.android.providers.settings/databases : long_press_timeout

? 시스템 앱 권한이 필요할 수 있습니다. 실제로 그렇게 확신하지는 않습니다. 하지만 다시 ViewConfiguration.getLongPressTimeout() 메소드를 추적하는 경우에는 상수 값이 Settings.Secure.LONG_PRESS_TIMEOUT에서 오는 것은 시간 제한 설정 작업이 작성된

settings.db에 대한 매핑이있는 것을 볼 수 있습니다 모든 뷰에 영향을주기 위해 뷰 클래스.

관련 문제