Browse Source

Switch between AM/PM when scrolling between forenoon and afternoon.

master
Henning Hall 7 years ago
parent
commit
aeb3e8dc05
4 changed files with 44 additions and 11 deletions
  1. +2
    -3
      README.md
  2. +24
    -7
      android/src/main/java/com/henninghall/date_picker/PickerView.java
  3. +6
    -0
      android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java
  4. +12
    -1
      android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java

+ 2
- 3
README.md View File

@ -59,10 +59,9 @@ The goal is to make a cross platform variant of [DatePickerIOS](https://facebook
- [x] Locale support. (AM/PM, 12h/24h toggled and strings translated)
- [x] Replace todays date with the string "Today" (considering locale)
- [x] Animate to date when state change occur.
- [x] Switch between AM/PM when scrolling between forenoon and afternoon.
- [ ] Transparent background support. (Probably need to include transparent gradient).
- [ ] Align text to right.
- [ ] Mode: date
- [ ] Mode: time
- [ ] Support maximumDate/minimumDate. (Gray out and animate back to max/min value if exceeded).
- [ ] Switch between AM/PM when scrolling between forenoon and afternoon.
- [ ] Support maximumDate/minimumDate. (Gray out and animate back to max/min value if exceeded).

+ 24
- 7
android/src/main/java/com/henninghall/date_picker/PickerView.java View File

@ -1,5 +1,6 @@
package com.henninghall.date_picker;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
@ -23,6 +24,8 @@ import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class PickerView extends RelativeLayout {
private final RelativeLayout wheelsWrapper;
private final NumberPickerView hourPicker;
private final NumberPickerView ampmPicker;
private SimpleDateFormat dateFormat;
private HourWheel hourWheel;
private DayWheel dayWheel;
@ -39,19 +42,20 @@ public class PickerView extends RelativeLayout {
Locale locale = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP ? Locale.forLanguageTag("en") : Locale.getDefault();
NumberPickerView hourPicker = (NumberPickerView) rootView.findViewById(R.id.hour);
hourWheel = new HourWheel(hourPicker, onWheelChangeListener, locale);
NumberPickerView dayPicker = (NumberPickerView) rootView.findViewById(R.id.day);
dayWheel = new DayWheel(dayPicker, onWheelChangeListener, locale);
NumberPickerView minutePicker = (NumberPickerView) rootView.findViewById(R.id.minutes);
minutesWheel = new MinutesWheel(minutePicker, onWheelChangeListener, locale);
NumberPickerView ampmPicker = (NumberPickerView) rootView.findViewById(R.id.ampm);
ampmPicker = (NumberPickerView) rootView.findViewById(R.id.ampm);
ampmWheel = new AmPmWheel(ampmPicker, onWheelChangeListener, locale);
hourPicker = (NumberPickerView) rootView.findViewById(R.id.hour);
hourWheel = new HourWheel(hourPicker, onWheelChangeListener, locale);
dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US);
changeAmPmWhenPassingMidnightOrNoon();
}
WheelChangeListener onWheelChangeListener = new WheelChangeListener(){
@ -59,9 +63,7 @@ public class PickerView extends RelativeLayout {
public void onChange() {
WritableMap event = Arguments.createMap();
try {
String dateString = getDateString();
Date date = dateFormat.parse(dateString);
Date date = dateFormat.parse(getDateString());
event.putDouble("date", date.getTime());
} catch (ParseException e) {
e.printStackTrace();
@ -116,4 +118,19 @@ public class PickerView extends RelativeLayout {
super.requestLayout();
post(measureAndLayout);
}
private void changeAmPmWhenPassingMidnightOrNoon(){
hourPicker.setOnValueChangeListenerInScrolling(new NumberPickerView.OnValueChangeListenerInScrolling() {
@Override
public void onValueChangeInScrolling(NumberPickerView picker, int oldVal, int newVal) {
if(Utils.usesAmPm(hourWheel.getLocale())){
String oldValue = hourWheel.getValueAtIndex(oldVal);
String newValue = hourWheel.getValueAtIndex(newVal);
boolean passingNoonOrMidnight = (oldValue.equals("12") && newValue.equals("11")) || oldValue.equals("11") && newValue.equals("12");
if (passingNoonOrMidnight) ampmPicker.smoothScrollToValue((ampmPicker.getValue() + 1) % 2);
}
}
});
}
}

+ 6
- 0
android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java View File

@ -3,7 +3,11 @@ package com.henninghall.date_picker.wheels;
import com.henninghall.date_picker.Utils;
import com.henninghall.date_picker.WheelChangeListener;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import cn.carbswang.android.numberpickerview.library.NumberPickerView;
@ -19,6 +23,8 @@ public class AmPmWheel extends Wheel {
void init() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
displayValues.add(displayFormat.format(cal.getTime()));
values.add(format.format(cal.getTime()));

+ 12
- 1
android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java View File

@ -46,7 +46,15 @@ public abstract class Wheel {
public String getValue() {
if(!visible()) return "";
return values.get(picker.getValue());
return getValueAtIndex(getIndex());
}
public int getIndex() {
return picker.getValue();
}
public String getValueAtIndex(int index) {
return values.get(index);
}
public void setValue(Date date) {
@ -89,4 +97,7 @@ public abstract class Wheel {
picker.setVisibility(View.VISIBLE);
}
public Locale getLocale() {
return locale;
}
}

Loading…
Cancel
Save