|
@ -20,6 +20,7 @@ public class AndroidNative extends NumberPicker implements Picker { |
|
|
|
|
|
|
|
|
private Picker.OnValueChangeListener onValueChangedListener; |
|
|
private Picker.OnValueChangeListener onValueChangedListener; |
|
|
private int state = SCROLL_STATE_IDLE; |
|
|
private int state = SCROLL_STATE_IDLE; |
|
|
|
|
|
private OnValueChangeListenerInScrolling listenerInScrolling; |
|
|
|
|
|
|
|
|
public AndroidNative(Context context) { |
|
|
public AndroidNative(Context context) { |
|
|
super(context); |
|
|
super(context); |
|
@ -158,13 +159,7 @@ public class AndroidNative extends NumberPicker implements Picker { |
|
|
public void run() { |
|
|
public void run() { |
|
|
changeValueByOne(self, increment); |
|
|
changeValueByOne(self, increment); |
|
|
if (isLast) { |
|
|
if (isLast) { |
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
|
@Override |
|
|
|
|
|
public void run() { |
|
|
|
|
|
onValueChangedListener.onValueChange(); |
|
|
|
|
|
} |
|
|
|
|
|
// the delay make sure the wheel has stopped before sending the value change event |
|
|
|
|
|
}, 500); |
|
|
|
|
|
|
|
|
sendEventIn500ms(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}, ms); |
|
|
}, ms); |
|
@ -172,34 +167,53 @@ public class AndroidNative extends NumberPicker implements Picker { |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void setOnValueChangeListenerInScrolling(final OnValueChangeListenerInScrolling listener) { |
|
|
public void setOnValueChangeListenerInScrolling(final OnValueChangeListenerInScrolling listener) { |
|
|
|
|
|
listenerInScrolling = listener; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) { |
|
|
|
|
|
this.onValueChangedListener = listener; |
|
|
final Picker self = this; |
|
|
final Picker self = this; |
|
|
|
|
|
|
|
|
super.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { |
|
|
super.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { |
|
|
@Override |
|
|
@Override |
|
|
public void onValueChange(NumberPicker numberPicker, int from, int to) { |
|
|
|
|
|
listener.onValueChangeInScrolling(self, from, to); |
|
|
|
|
|
|
|
|
public void onValueChange(NumberPicker numberPicker, int oldVal, int newVal) { |
|
|
|
|
|
if(listenerInScrolling != null) { |
|
|
|
|
|
listenerInScrolling.onValueChangeInScrolling(self, oldVal, newVal); |
|
|
|
|
|
} |
|
|
|
|
|
// onValueChange is triggered also during scrolling. Since we don't want |
|
|
|
|
|
// to send event during scrolling we make sure wheel is still. This particular |
|
|
|
|
|
// case happens when wheel is tapped, not scrolled. |
|
|
|
|
|
if(state == SCROLL_STATE_IDLE) { |
|
|
|
|
|
sendEventIn500ms(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) { |
|
|
|
|
|
this.onValueChangedListener = listener; |
|
|
|
|
|
super.setOnScrollListener(new OnScrollListener() { |
|
|
super.setOnScrollListener(new OnScrollListener() { |
|
|
@Override |
|
|
@Override |
|
|
public void onScrollStateChange(NumberPicker numberPicker, int nextState) { |
|
|
public void onScrollStateChange(NumberPicker numberPicker, int nextState) { |
|
|
boolean stoppedScrolling = state != SCROLL_STATE_IDLE && nextState == SCROLL_STATE_IDLE; |
|
|
|
|
|
if (stoppedScrolling) { |
|
|
|
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
|
@Override |
|
|
|
|
|
public void run() { |
|
|
|
|
|
listener.onValueChange(); |
|
|
|
|
|
} |
|
|
|
|
|
// the delay make sure the wheel has stopped before sending the value change event |
|
|
|
|
|
}, 500); |
|
|
|
|
|
} |
|
|
|
|
|
state = nextState; |
|
|
|
|
|
|
|
|
sendEventIfStopped(nextState); |
|
|
|
|
|
state = nextState; |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void sendEventIfStopped(int nextState){ |
|
|
|
|
|
boolean stoppedScrolling = state != SCROLL_STATE_IDLE && nextState == SCROLL_STATE_IDLE; |
|
|
|
|
|
if (stoppedScrolling) { |
|
|
|
|
|
sendEventIn500ms(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void sendEventIn500ms(){ |
|
|
|
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
|
@Override |
|
|
|
|
|
public void run() { |
|
|
|
|
|
onValueChangedListener.onValueChange(); |
|
|
|
|
|
} |
|
|
|
|
|
// the delay make sure the wheel has stopped before sending the value change event |
|
|
|
|
|
}, 500); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |