2012-08-12 14 views
5

के अंतराल को बढ़ाने/घटाने की सेटिंग सेट करना क्या नंबर पिकर के अन्य मूल्य पर वृद्धि/कमी अंतराल सेट करना संभव है? उदाहरण के लिए 50 (50, 100, 150, 200, 250 आदि)? या इसके लिए कुछ अनुकूलन/हैक की आवश्यकता है?नंबरपिकर

उत्तर

6

मुझे लगता है कि आप यह कर सकते हैं:

  • अपने पिकर के लिए एक displayed array values Initialise:

    int NUMBER_OF_VALUES = 10; //num of values in the picker 
    int PICKER_RANGE = 50; 
    ... 
    String[] displayedValues = new String[NUMBER_OF_VALUES]; 
    //Populate the array 
    for(int i=0; i<NUMBER_OF_VALUES; i++) 
        displayedValues[i] = String.valueOf(PICKER_RANGE * (i+1)); 
    /* OR: if the array is easy to be hard-coded, then just hard-code it: 
        String[] displayedValues = {"50", "100", "150", .....}; */ 
    
  • सेट अपने पिकर के लिए प्रदर्शित सरणी:

    /* 
    NOTE: Your picker range has to be [0, displayedValues.size()-1] to be 
         consistent with the array index (displayedValues index). 
    */ 
    //ToDo: Initialize the picker first. 
    numPicker.setMinValue(0); 
    numPicker.setMaxValue(displayedValues.size()-1); 
    numPicker.setDisplayedValues(displayedValues); 
    
  • जब आप पिकर के मूल्य को प्राप्त/सेट करना चाहते हैं:

    //To get the current value in the picker 
    choosenValue = displayedValues[numPicker.getValue()]; 
    //To set a new value (let's say 150) 
    for(int i=0; i<displayedValues.length ; i++) 
        if(displayedValues[i].equals("150")) 
         numPicker.setValue(i); 
    

अंत में, एक महान आसानी से अनुकूलित विजेट android-wheel कहा जाता है। यदि आप चाहें तो आप इसे देख सकते हैं और इसका इस्तेमाल कर सकते हैं।

+0

में उनके उत्तर और उत्तर देने के लिए धन्यवाद। हालांकि मैं उपयोगकर्ता को पिकर में कोई सटीक मूल्य लगाने से प्रतिबंधित नहीं करना चाहता हूं।उदाहरण के लिए यदि आप मूल्य 47 या 48 डालना चाहते हैं तो आपको इसे मुक्त करना चाहिए। यदि आप पिकर को दो बार टैप करते हैं तो यह नंबर पिकर का डिफ़ॉल्ट व्यवहार भी है। –

+0

तो, आपका प्रश्न 'संख्या पिकर के अंतराल को बढ़ाने/घटाने' के बारे में नहीं है ?! – iTurki

+0

यकीन है कि यह है। मैं चाहता हूं कि स्क्रॉलिंग या नंबरपिकर के ऊपर/नीचे तीरों का उपयोग करते समय वृद्धि/कमी के अंतराल को पूर्व निर्धारित करना है। लेकिन यदि आप उपयोगकर्ता के रूप में अधिक सटीक मान रखना चाहते हैं, तो उन अंतराल के बीच आपको नंबरपिकर के डिफ़ॉल्ट व्यवहार के रूप में ऐसा करने की अनुमति दी जानी चाहिए। मैंने अभी तक आपके समाधान का परीक्षण नहीं किया है, इसलिए हो सकता है कि यह यहां वर्णित कार्य करता है। –

0

@ iturki का अंतिम बिंदु एक मूल्य निर्धारित करता है। क्योंकि valueInNumberPicker एक्स PICKER_RANGE = valueInDisplayedValueArray तो हम पाश के लिए से बच सकते हैं:

// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150 
numPicker.setValue(150/PICKER_RANGE -1); 

मेरे 2 सेंट।

वैसे, iturki द्वारा महान जवाब।

0

मैं अलग कदम आकारों के साथ स्क्रॉल के लिए onScrollListener का इस्तेमाल किया है और संख्या कीबोर्ड के साथ प्रत्यक्ष इनपुट से निपटने के लिए onValueChanged। उपयोग के लिए आपको परिवर्तनीय oldValue की आवश्यकता है जो दोनों श्रोताओं में उपलब्ध है।

int oldValue = 0; 

onScrollListener मैं STATE_IDLE इस्तेमाल किया सिर्फ इसलिए कि यह काम करता है और मैं टी 100% तीनों के बीच इस प्रयोग के लिए अंतर को समझने डॉन में ... लगता है कि आप उन्हें या तो इस उद्देश्य के लिए उपयोग कर सकते हैं।

स्क्रॉल करने से पहले पुराने मूल्य को जानने के लिए आपको वैश्विक पुराने वैल्यू चर की आवश्यकता है। मैं एक अन्य समाधान नहीं मिला है। यदि खंड न्यूनतम (0) और अधिकतम (1000) बोर्डर है।

speedPicker.setValue(oldValue); 
vitess.setProgress(oldValue); 
((MainActivity) getActivity()).setSpeed(oldValue); 

इन तीन कॉल मेरी तत्वों को अपडेट (vitess एक युग्मित Progressbar है, speedPicker numberPicker है)।

ऑनवैलचेंज में मैं तत्व भी अपडेट करता हूं और मैंने पुराना वैल्यू सेट किया है।

वैसे यहाँ stepsize इस कोड काम करता है कुछ परीक्षण के बाद मेरे लिए अच्छा छोड़ने 100.

speedPicker.setOnScrollListener(new OnScrollListener() { 
     public void onScrollStateChange(NumberPicker speedPicker, int scrollState) { 

      if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) { 
       if (speedPicker.getValue() < oldValue){ 
        if (speedPicker.getValue() >= 100) 
         oldValue-=100; 
        else 
         oldValue = 0; 

       } 
       else{ 
        if (speedPicker.getValue() <= 900) 
         oldValue+=100; 
        else 
         oldValue = 1000; 
       } 

       speedPicker.setValue(oldValue); 
       vitess.setProgress(oldValue); 
       ((MainActivity) getActivity()).setSpeed(oldValue); 

      } 
      else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_FLING) { 
      } 
      else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { 
      } 
     } 
    }); 

    speedPicker.setOnValueChangedListener(new OnValueChangeListener() { 
     public void onValueChange(NumberPicker speedPicker, int oldVal, int newVal) { 

      oldValue = oldVal; 
      speedPicker.setValue(newVal); 
      vitess.setProgress(newVal); 
      ((MainActivity) getActivity()).setSpeed(newVal); 

     } 
    }); 

है।

यह उत्तर jpintado से प्रेरित था। Android NumberPicker OnValueChangeListener

+0

लेकिन मुझे शुरुआत में कुछ जोड़ना है, सबसे पहले कहना है कि 4-5 में/घटता है 1 को वैल्यू चेंज द्वारा पहचाना जाता है! और उसके बाद मूल्य 100 से बदल जाता है। – KelvinGradCelsius