2013-07-27 88 views

回答

14

我終於實現了一個觸摸屏長按代表長擊事件的TAP事件序列的開始時,THX所有:

textView.setOnTouchListener(new View.OnTouchListener() { 

    private static final int MIN_CLICK_DURATION = 1000; 
    private long startClickTime; 

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

     switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 
      longClickActive = false; 
      break; 
     case MotionEvent.ACTION_DOWN: 
      if (longClickActive == false) { 
       longClickActive = true; 
       startClickTime = Calendar.getInstance().getTimeInMillis(); 
      } 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if (longClickActive == true) { 
       long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
       if (clickDuration >= MIN_CLICK_DURATION) { 
        Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show(); 
        longClickActive = false; 
       } 
      } 
      break; 
     } 
     return true; 
    } 
}); 

其中private boolean longClickActive = false;是一個類變量。

+2

感謝這導致我的解決方案。 – ctapp1

+0

問題是長時間輕敲等待ACTION_MOVE,有時不會調用,但必須捕獲長時間輕敲 –

2

爲了計算觸摸算你能得到您的活動getPointerCount()之類here

和長按也許this幫助

編輯:希望this link幫助您確定獲得觸摸持續時間

+0

我需要時間不算老兄。 –

+1

也許我無法理解你,所以希望編輯答案和附加鏈接幫助你更多,祝你好運 –

+0

這不完全是我的答案,但啓發我通過使用布爾標誌。 thx:D –

1

您必須在ACTION_DOWN和ACTION_UP事件之間計算時間。 這是不可能只在ACTOIN_DOWN狀態來計算這個時間,因爲它是

+0

Thx,我通過使用ACTION_DOWN和ACTION_MOVE來完成。 –

1

試試這個。你不需要爲此找到破解。

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
public void onLongPress(MotionEvent e) { 
    Log.e("", "Longpress detected"); 
} 
}); 

public boolean onTouchEvent(MotionEvent event) { 
if (gestureDetector.onTouchEvent(event)) { 
    return true; 
} 
switch (event.getAction()) { 
    case MotionEvent.ACTION_UP: 
    break; 
    case MotionEvent.ACTION_DOWN: 
    break; 
    case MotionEvent.ACTION_MOVE: 
    break; 
} 
return true; 
} 
};