2012-03-31 15 views

उत्तर

13

AFAIK, नहीं। यह के माध्यम से ViewConfiguration पर ढांचे में हार्ड-वायर्ड है।

आप अपने स्वयं के स्पर्श कार्यक्रमों को संभालने और अपनी "लंबी क्लिक" अवधारणा को परिभाषित करने के लिए आपका स्वागत है। बस यह सुनिश्चित करें कि उपयोगकर्ता अपेक्षाओं से बहुत नाटकीय रूप से अलग नहीं है, और संभवतः उपयोगकर्ता उम्मीद करेगा कि अन्य सभी ऐप्स किस प्रकार उपयोग करते हैं, जो मानक 500ms अवधि है।

+2

आप अपनी लंबी क्लिक अवधारणा को परिभाषित करने के बारे में कैसे जाएंगे? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

धन्यवाद, मुझे लगता है कि मैं अभी के लिए डिफ़ॉल्ट के साथ रहना होगा। – fhucho

+0

@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz शायद ओवरराइडिंग व्यू द्वारा। कूल उपयोगकर्ता नाम बीटीडब्ल्यू ;-) – fhucho

3

यह सबसे सरल काम कर समाधान मैं इस प्रतिबंध के लिए मिला था: देर तक दबाए रखने

private int longClickDuration = 3000; 
private boolean isLongPress = false; 

numEquipeCheat.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       isLongPress = true; 
       Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         if (isLongPress) { 
          Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); 
          vibrator.vibrate(100); 
          // set your code here 
          // Don't forgot to add <uses-permission android:name="android.permission.VIBRATE" /> to vibrate. 
         } 
        } 
       }, longClickDuration); 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       isLongPress = false; 
      } 
      return true; 
     } 
    }); 
11

इस सेट अवधि के लिए मेरा तरीका है यह मैं क्या उपयोग है। यह दो उल्लेखनीय मतभेदों के साथ, Cumulo Nimbus के जवाब के समान है।

  1. डाउन टाइम और वर्तमान समय के लिए पहले से संग्रहीत ईवेंट मानों का उपयोग करें। प्रयास को डुप्लिकेट करने के अलावा, श्रोताओं को एक ही समय में कई अलग-अलग विचारों के लिए उपयोग करने योग्य प्रभाव पड़ता है, बिना प्रत्येक व्यक्तिगत घटना के प्रारंभ समय को ट्रैक किए।
  2. यह सुनिश्चित करने के लिए कि उपयोगकर्ता टच ईवेंट के दौरान दृश्य से दूर नहीं चले गए हैं, view.isPressed देखें। यह onClick और onLongClick के लिए डिफ़ॉल्ट सिस्टम व्यवहार की नकल करता है।

long longPressTimeout = 2000; 

@Override 
public boolean onTouch(View view, MotionEvent event) { 
    if (view.isPressed() && event.getAction() == MotionEvent.ACTION_UP) { 
     long eventDuration = event.getEventTime() - event.getDownTime(); 
     if (eventDuration > longPressTimeout) { 
      onLongClick(view); 
     } else { 
      onClick(view); 
     } 
    } 
    return false; 
} 

दृश्य सामान्य रूप से क्लिक करने योग्य आप काम करने के लिए view.isPressed() जांच करने के लिए view.setClickable(true) को कॉल करना होगा नहीं है।

2

को

//Define these variables at the beginning of your Activity or Fragment: 
private long then; 
private int longClickDuration = 5000; //for long click to trigger after 5 seconds 

... 

//This can be a Button, TextView, LinearLayout, etc. if desired 
ImageView imageView = (ImageView) findViewById(R.id.desired_longclick_view); 
imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      then = (long) System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if ((System.currentTimeMillis() - then) > longClickDuration) { 
      /* Implement long click behavior here */ 
      System.out.println("Long Click has happened!"); 
      return false; 
      } else { 
      /* Implement short click behavior here or do nothing */ 
      System.out.println("Short Click has happened..."); 
      return false; 
      } 
     } 
     return true; 
     } 
    }); 
संबंधित मुद्दे