2012-07-27 16 views
7

पर सेकरबार का अंगूठा, जब उपयोगकर्ता ने इसे क्लिक्स किया है तो किसी ईवेंट को ट्रिगर करने के लिए मैं लुकबार के अंगूठे पर एक क्लिक करने योग्य ईवेंट पंजीकृत करना चाहता हूं। क्या यह संभव है?क्लिक

+1

क्या आपने इसे हल किया? – David

उत्तर

0

मैं इसे इस तरह से कार्य करें:

pagesSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { //listener 
     @Override 
     public void onStopTrackingTouch(final SeekBar seekBar) { 
      //add your event here 
     } 

     @Override 
     public void onStartTrackingTouch(final SeekBar seekBar) { 
     } 

     @Override 
     public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { 
       updateControls(progress, false); 
     } 
    }); 
+0

मैं केवल अंगूठे में क्लिक करने में सक्षम होना चाहता हूं। वह श्रोता खोज बार – biquillo

1

मैं निम्नलिखित तरीके से इस लक्ष्य को हासिल करने में सक्षम था:

seekBar.setOnTouchListener(new OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if(event.getAction() == MotionEvent.ACTION_MOVE) 
     { 
      changedPosition = true; 
      seekBar.setProgress(seekBar.getProgress()); 
      return false; 
     } 
     else if (event.getAction() == MotionEvent.ACTION_UP) 
     { 
      if(!changedPosition) 
      { 
        //do action here 
      } 
     } 
    } 

आशा है कि यह मदद करता है

+2

के हर हिस्से में क्लिक करने के लिए ट्रिगर किया गया है, यह पूरे साधक पर स्पर्श घटनाओं को सुनता है बल्कि सिर्फ अंगूठे। – Prateek

+0

प्रेटेक सही है, जब आप तलाशबार के अन्य हिस्सों में भी जाते हैं तो यह आग लग जाएगा। –

+0

@ BjörnKechel जबकि यह सच है कि यह सभी साधक पर घटनाओं को छूने के लिए सुनता है लेकिन यदि आप अंगूठे के अलावा कहीं और इसे छूएंगे तो ACTION_MOVE ट्रिगर हो जाएगा और ACTION_UP में कुछ भी नहीं होगा अगर कथन का धन्यवाद। – zwebie

2

zwebie संयोजन और उचित के जवाब Nermeens समाधान:

seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    private int mProgressAtStartTracking; 
    private final int SENSITIVITY; 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
     // handle progress change 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 
     mProgressAtStartTracking = seekBar.getProgress(); 
    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
     if(Math.abs(mProgressAtStartTracking - seekBar.getProgress()) <= SENSITIVITY){ 
      // react to thumb click 
     } 
    } 
}); 

तो यह वास्तव में अंगूठे पर क्लिक करता है, अंगूठे की चाल पर नहीं, और तलाशने वाले के अन्य हिस्सों पर क्लिक पर नहीं।

आप संवेदनशीलता को समायोजित कर सकते हैं, क्योंकि कभी-कभी एक क्लिक पहले ही अंगूठे को थोड़ा सा स्थानांतरित करता है और अभी भी कम निराशाजनक होने पर थोड़ा बदलाव करने की इजाजत देता है। यहां एक अच्छा मूल्य तलाशबार के आकार और उसके अधिकतम मूल्य पर निर्भर करता है। मेरे लिए 3 ने पोर्ट्रेट लेआउट पर 50 अधिकतम के साथ पूर्ण-चौड़ाई वाली खोजबार पर अच्छी तरह से काम किया।

+0

नहीं बदला हो, जो भी डाउनवॉटेड हो: कृपया मुझे बताएं कि आप मेरे उत्तर में क्या सोचते हैं। यह अन्य दो उत्तरों से बेहतर काम करता है। –

+0

धन्यवाद, मेरे लिए ठीक काम कर रहा है हालांकि पता नहीं क्यों किसी ने मतदान किया – Vicky

0

मैंने बिजोम के उत्तर को प्रेरणा के रूप में उपयोग किया। अंगूठे की चाल तब होती है जब उपयोगकर्ता अंगूठे पर क्लिक नहीं करता है, यह हिल नहीं जाएगा। उम्मीद है की यह मदद करेगा। :)

यदि आपके पास कोई प्रश्न है कि यह कैसे काम करता है, तो टिप्पणी करने के लिए स्वतंत्र महसूस करें।

mSeekBarSpeed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     int progress = mSeekBarSpeed.getProgress(); 

     boolean started = false; //use this variable to see whether the user clicked the right place 


     @Override 
     public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) { 
      if(!started){ //check to see if user clicks the right place 
       //if the user clicks within a specific threshold 
       float threshold = (float)seekBar.getMax()/seekBar.getWidth() * seekBar.getThumb().getIntrinsicWidth()/2; 
       if(Math.abs(progressValue - progress) < threshold){ 
        if(fromUser){ //checks if user actually clicked it 
         started = true; 
        } 

       }else{ 
        seekBar.setProgress(progress); //set to original progress 
        onStopTrackingTouch(seekBar); //not really necessary, keep or delete based on your needs 
        return; //get out of method 
       } 
      } 

      if(started) { 

       progress = progressValue; //update progress variable 
       System.out.println("onProgressChanged:" + progress + "/" + seekBar.getMax()); 

       //DO WHAT YOU NEED TO DO WHEN PROGRESS IS CHANGING 

      } 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      System.out.println("onStartTracking:" + progress + "/" + seekBar.getMax()); 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      System.out.println("onStopTracking:" + progress + "/" + seekBar.getMax()); 
      //DO WHATEVER YOU NEED TO DO WHEN PROGRESS IS DONE CHANGING 

      started = false; //remember to set variable to false 
     } 

    }); 
संबंधित मुद्दे