Browse Source

bugfix: fast scroll flickering (#226)

master
Henning Hall 5 years ago
committed by GitHub
parent
commit
b84ccc5db8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 6 deletions
  1. +1
    -1
      android/build.gradle
  2. +12
    -5
      android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java
  3. +5
    -0
      android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java
  4. +1
    -0
      android/src/main/java/com/henninghall/date_picker/pickers/Picker.java
  5. +2
    -0
      android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java
  6. +6
    -0
      android/src/main/java/com/henninghall/date_picker/ui/Wheels.java

+ 1
- 1
android/build.gradle View File

@ -25,7 +25,7 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.facebook.react:react-native:+'
implementation 'com.henninghall.android:NumberPickerView:1.1.4'
implementation 'com.henninghall.android:NumberPickerView:1.1.5'
implementation 'org.apache.commons:commons-lang3:3.7'
implementation group: 'net.time4j', name: 'time4j-android', version: '4.2-2018i'
}

+ 12
- 5
android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java View File

@ -13,9 +13,13 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import static android.widget.NumberPicker.OnScrollListener.SCROLL_STATE_FLING;
import static android.widget.NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;
public class AndroidNative extends NumberPicker implements Picker {
private Picker.OnValueChangeListener onValueChangedListener;
private int state = SCROLL_STATE_IDLE;
public AndroidNative(Context context) {
super(context);
@ -87,6 +91,11 @@ public class AndroidNative extends NumberPicker implements Picker {
// Not needed for this picker
}
@Override
public boolean isSpinning() {
return state == SCROLL_STATE_FLING;
}
@Override
public void smoothScrollToValue(final int value) {
final AndroidNative self = this;
@ -176,11 +185,9 @@ public class AndroidNative extends NumberPicker implements Picker {
public void setOnValueChangedListener(final Picker.OnValueChangeListener listener) {
this.onValueChangedListener = listener;
super.setOnScrollListener(new OnScrollListener() {
int previousState = SCROLL_STATE_IDLE;
@Override
public void onScrollStateChange(NumberPicker numberPicker, int state) {
boolean stoppedScrolling = previousState != SCROLL_STATE_IDLE && state == SCROLL_STATE_IDLE;
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
@ -190,7 +197,7 @@ public class AndroidNative extends NumberPicker implements Picker {
// the delay make sure the wheel has stopped before sending the value change event
}, 500);
}
previousState = state;
state = nextState;
}
});
}

+ 5
- 0
android/src/main/java/com/henninghall/date_picker/pickers/IosClone.java View File

@ -44,4 +44,9 @@ public class IosClone extends NumberPickerView implements Picker {
public View getView() {
return this;
}
@Override
public boolean isSpinning() {
return super.isScrolling();
}
}

+ 1
- 0
android/src/main/java/com/henninghall/date_picker/pickers/Picker.java View File

@ -24,6 +24,7 @@ public interface Picker {
void setWrapSelectorWheel(boolean wrapSelectorWheel);
void setDividerHeight(int height);
void setItemPaddingHorizontal(int padding);
boolean isSpinning();
interface OnValueChangeListenerInScrolling {
void onValueChangeInScrolling(Picker picker, int oldVal, int newVal);

+ 2
- 0
android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java View File

@ -32,6 +32,8 @@ public class WheelChangeListenerImpl implements WheelChangeListener {
@Override
public void onChange(Wheel picker) {
if(wheels.hasSpinningWheel()) return;
WritableMap event = Arguments.createMap();
TimeZone timeZone = state.getTimeZone();
SimpleDateFormat dateFormat = uiManager.getDateFormat();

+ 6
- 0
android/src/main/java/com/henninghall/date_picker/ui/Wheels.java View File

@ -180,4 +180,10 @@ public class Wheels {
}};
}
public boolean hasSpinningWheel() {
for(Wheel wheel: getAll()) {
if(wheel.picker.isSpinning()) return true;
}
return false;
}
}

Loading…
Cancel
Save