2012-08-15 16 views
16

पर बटन दबाए जाने और रिलीज़ होने पर कैसे पता लगाया जाए, मैं एक टाइमर शुरू करना चाहता हूं जो तब शुरू होता है जब कोई बटन पहली बार दबाया जाता है और रिलीज़ होने पर समाप्त होता है (मूल रूप से मैं यह मापना चाहता हूं कि बटन कितनी देर तक दबाया जाता है)। मैं उन दोनों समय System.nanoTime() विधि का उपयोग करूँगा, फिर बटन को दबाए गए समय के लिए मापने के लिए अंतिम चरण से प्रारंभिक संख्या घटाएं।एंड्रॉइड

(आप nanoTime() या मापने कितनी देर तक एक बटन नीचे आयोजित किया जाता है के किसी अन्य तरीके के अलावा कुछ का उपयोग कर के लिए कोई सुझाव है, मैं उन लोगों के लिए खुला के रूप में अच्छी तरह से कर रहा हूँ।)

धन्यवाद! एंडी

+0

इस अतः पोस्ट करने के लिए समान: http://stackoverflow.com/q/4410362/2069407 –

उत्तर

28

उपयोग OnClickListener के बजाय OnTouchListener:

// this goes somewhere in your class: 
    long lastDown; 
    long lastDuration; 

    ... 

    // this goes wherever you setup your button listener: 
    button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      lastDown = System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      lastDuration = System.currentTimeMillis() - lastDown; 
     } 

     return true; 
    } 
    }); 
+0

हमें कोड आप बटन के लिए किया है प्रदान क्लिक –

+0

दुर्भाग्य से, यह कीबोर्ड के साथ बटन दबाए जाने पर काम नहीं करता है। यह केवल स्पर्श होने पर ही काम करता है। –

+0

तो आप देखना चाहते हैं कि कीबोर्ड बटन कितना समय दबाया जाता है? – Nick

4
  1. onTouchListener में टाइमर शुरू करते हैं।
  2. ऑनक्लिक लिस्टनर में समय रोकें।

भिन्नता की गणना करें।

5

यह निश्चित रूप से काम करेगा:

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      increaseSize(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      resetSize(); 
     } 
     return true; 
    } 
});