You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
2.9 KiB

package com.henninghall.date_picker.wheels;
import com.henninghall.date_picker.*;
import cn.carbswang.android.numberpickerview.library.*;
import java.text.*;
import java.util.*;
import org.apache.commons.lang3.*;
public abstract class Wheel
{
private final Wheel self;
public PickerView pickerView;
private String userSetValue;
ArrayList<String> values;
ArrayList<String> displayValues;
public NumberPickerView picker;
public SimpleDateFormat format;
SimpleDateFormat displayFormat;
abstract void init();
public abstract boolean visible();
abstract String getFormatTemplate();
public Wheel(final NumberPickerView picker, final PickerView pickerView) {
this.self = this;
this.pickerView = pickerView;
this.picker = picker;
this.refresh(false);
picker.setOnValueChangedListener((NumberPickerView.OnValueChangeListener)new NumberPickerView.OnValueChangeListener() {
public void onValueChange(final NumberPickerView picker, final int oldVal, final int newVal) {
pickerView.getListener().onChange(Wheel.this.self);
}
});
}
public int getIndexOfDate(final Date date) {
return this.values.indexOf(this.format.format(date));
}
public void animateToDate(final Date date) {
this.picker.smoothScrollToValue(this.getIndexOfDate(date));
}
public String getValue() {
if (!this.visible()) {
return this.userSetValue;
}
return this.getValueAtIndex(this.getIndex());
}
public int getIndex() {
return this.picker.getValue();
}
public String getValueAtIndex(final int index) {
return this.values.get(index);
}
public void setValue(final Date date) {
this.userSetValue = this.format.format(date);
final int index = this.getIndexOfDate(date);
if (index > -1) {
if (this.picker.getValue() == 0) {
this.picker.setValue(index);
}
else {
this.picker.smoothScrollToValue(index);
}
}
}
public void refresh(final boolean keepOldValue) {
this.displayFormat = new SimpleDateFormat(this.getFormatTemplate(), this.pickerView.locale);
this.format = new SimpleDateFormat(this.getFormatTemplate(), LocaleUtils.toLocale("en_US"));
this.values = new ArrayList<String>();
this.displayValues = new ArrayList<String>();
final int oldValue = this.picker.getValue();
if (this.visible()) {
this.add();
this.init();
if (keepOldValue) {
this.picker.setValue(oldValue);
}
}
else {
this.remove();
}
}
private void remove() {
this.picker.setVisibility(8);
}
private void add() {
this.picker.setVisibility(0);
}
}