是否可以将NumberPicker的增加/减少间隔设置为其他值?例如到50(50,100,150,200,250等)?或者它需要一些定制/破解?NumberPicker的设置增加/减少间隔
回答
我认为你可以这样做:
初始化一个displayed array values您选择器:
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一个伟大的易于定制部件。如果你喜欢,你可以检查出来并使用它。
@ iturki最后一点设置了一个值。 因为valueInNumberPicker X PICKER_RANGE = valueInDisplayedValueArray 因此,我们可以通过避免for循环:
// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150
numPicker.setValue(150/PICKER_RANGE -1);
我的2美分。
顺便说一下,由iturki伟大的答案。
我已经使用了onScrollListener与不同的步长滚动和onValueChanged处理直接输入与数字键盘。为了使用,您需要两个侦听器都可用的变量oldValue。
int oldValue = 0;
在我使用的STATE_IDLE只是因为它的工作原理,我不明白,100%三个之间的使用差异onScrollListener ......想你可以使用他们要么为了这个目的。
您需要使用全局oldValue变量来了解滚动前的旧值。我还没有找到其他解决方案。 if子句是min(0)和max(1000)寄存器。
speedPicker.setValue(oldValue);
vitess.setProgress(oldValue);
((MainActivity) getActivity()).setSpeed(oldValue);
这三个调用更新我的元素(vitess是耦合progressBar,speedPicker是numberPicker)。
在onValueChange我更新元素,我设置oldValue。
顺便说步长在这里是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
但我必须在开始时添加一些东西,比如4-5 in/decrease by 1被onValueChange所识别!之后,值变化100。 – KelvinGradCelsius 2013-07-19 10:21:30
- 1. 指数时间减少的设置间隔
- 2. Cocos2d进度间隔减少
- 3. 拖动增加/减少值
- 4. C - 优先增加/减少?
- 5. c#Trackbar增加/减少
- 6. 减少和增加浮动增量android
- 7. 如何将间隔分成增加/减少啁啾状长度(MatlabR2014b)?
- 8. 的Arduino:增加和减少的按钮
- 9. 如何增加和减少TextView的值?
- 10. 增加/减少UIImageView的亮度
- 11. 如果我增加max_excecution_time将会加载时间会增加还是减少?
- 12. 如何添加按钮以减少和增加动作脚本2.0中的时间间隔sp_dump
- 13. 增加/减少直方图中簇之间的距离
- 14. 增加Laravel 5.4中未决作业的轮询时间减少
- 15. 两个值之间的百分比增加或减少
- 16. 如何检查的Audioplayer增加播放时间减少2秒
- 17. 为增加/减少设置“结束条件”最优雅的方式?
- 18. Android减少或增加Spinner中的选择位置
- 19. 不过度增加/减少值
- 20. “无限”增加/减少角度
- 21. WACounter显示,但不增加/减少
- 22. 增加或减少网站尺寸
- 23. Zend +/-按钮来增加或减少值
- 24. 增加/减少大量整数
- 25. 用C#动态增加/减少数字
- 26. MPMusicPlayerController音量增加和减少动态
- 27. textview在android webview中增加和减少
- 28. Highcharts从输入增加/减少数据
- 29. Javascript函数增加/减少cellValue
- 30. 增加/减少图像大小,网站
感谢您的回复和建议的解决方案。但是我不想限制用户在拾取器中放置任何精确的值。例如,如果你想要投入价值47或48,你应该自由地做到这一点。如果您双击选取器,这也是数字选取器的默认行为。 – 2012-08-13 06:38:27
所以,你的问题不是关于NumberPicker的增加/减少间隔?! – iTurki 2012-08-13 07:23:22
当然可以。我想要的是当滚动或使用NumberPicker的向上/向下箭头时,预设增加/减少的时间间隔。但是,如果您作为用户想要提供更精确的值,则应在这些间隔之间允许这样做,这是NumberPicker的默认行为。我还没有测试过你的解决方案,所以它可能会按照这里描述的那样工作。 – 2012-08-13 07:28:09