2012-02-27 4 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の後のみ)。それは、より多くのAndroidの携帯電話で私のアプリをより簡単にする。私は、Java/OracleがlongClickを単純なparaをsec/milsecとして導入することを願っています – user1234817

+0

"mHasPerformedLongPress"は本当に設定されませんか? – wangqi060934

0

これは答えることが後半が、必要な誰かの場合であってもよいです。

あなたの携帯電話がルートされている場合は、タイムアウトを変更することができます。 データベースの値を希望のタイムアウト値に設定するだけです。これは、システム全体の長押しイベントに影響します。

ディレクトリ:settings.db

テーブル:::

を確保

ファイルを/data/data/com.android.providers.settings/databases long_press_timeout

コーディングによって?システムアプリの特権が必要な場合があります。実際にはそれほど確かではない。 しかし、あなたが戻ってViewConfiguration.getLongPressTimeout()メソッドを追跡する場合は、一定の値がsettings.dbセット操作がで書かれている

タイムアウトのマッピングであるSettings.Secure.LONG_PRESS_TIMEOUTから来ていることがわかりますすべてのビューに影響するようにクラスを表示します。

関連する問題