我有一个关于Android的问题NumberPicker
。 当用户在执行一扔NumberPicker
,对每一个步骤为监听OnValueChange
被触发。 我能以这种方式改变这种情况,该OLDVAL和的newval都不可能超过1互不相同且监听时,才会触发一次?
提前致谢。
编辑:我会尽量解释它在我的代码更加具体。
int diff = Math.abs(newVal - oldVal);
if (newVal - oldVal > 0) {
sendMessage(te);
for (int i = 0; i < diff; i++) {
sendMessage(plus);
}
sendMessage(te);
} else if (newVal - oldVal < 0) {
sendMessage(te);
for (int i = 0; i < diff; i++) {
sendMessage(minus);
}
sendMessage(te);
} else {
if (D)
Log.w(TAG, "This should NEVER happen");
}
这种方法被称为inonValueChange。 它发送消息太快我的连接设备中的时间作出反应。 所以,我需要以任何方式减缓下来。 有没有人有一个想法如何慢,没有让我的主线程睡眠? 当它处于睡眠状态,整个GUI是在此期间不响应。 我尽量避免这种情况。
谢谢。
取而代之的setOnValueChangedListener
可以使用setOnScrollListener
,并让您的选择器的值,当滚动状态SCROLL_STATE_IDLE
。 检查这个例子:
numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {
private int oldValue; //You need to init this value.
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
}
}
});
请注意,您需要初始化该值oldValue
听者变量。 如果你需要创建一个通用监听器(可接收值的任何数组),您可以创建一个实现自定义类NumberPicker.OnScrollListener
和接收在构造函数中的初始值。 事情是这样的:
public class MyNumberPickerScrollListener implements NumberPicker.OnScrollListener {
private int oldValue;
public MyNumberPickerScrollListener(int initialValue) {
oldValue = initialValue;
}
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
}
}
}
阅读NumberPicker.onScrollListener以获取更多信息的文档。