Android-SpinnerWheel 仿IOS滚轮效果的spinner
项目地址: https://github.com/ai212983/android-spinnerwheel
效果图:https://raw.github.com/ai212983/android-spinnerwheel/master/.assets/screenshot_00.png
项目迭代,UI大改,特别是时间选择器,android自带的用的是在是差强人意,在网站上找到了这个东西,觉得还不错,至少满足了我项目的需求
xml中配置组件
<antistatic.spinnerwheel.WheelVerticalView
android:id="@+id/hour"
android:layout_width="50dp"
android:layout_height="wrap_content" />
activity中的代码
//时间选择
hours = (AbstractWheel) m_dialog.findViewById(R.id.hour);
hours.setViewAdapter(new NumericWheelAdapter(this, 0, 23));
hours.setCyclic(true);
mins = (AbstractWheel) m_dialog.findViewById(R.id.mins);
mins.setViewAdapter(new MyNumericWheelAdapter(this, 0, 12, "%02d"));
mins.setCyclic(true);
// set current time
Calendar c = Calendar.getInstance();
int curHours = c.get(Calendar.HOUR_OF_DAY);
int curMinutes = c.get(Calendar.MINUTE);
hours.setCurrentItem(curHours);
mins.setCurrentItem(curMinutes);
//日期选择
day = (AbstractWheel) m_dialog.findViewById(R.id.day);
Calendar calendar = Calendar.getInstance(Locale.CHINESE);
mDayArrayAdapter = new MyDayArrayAdapter(this, calendar);
day.setViewAdapter(mDayArrayAdapter);
day.setCurrentItem(mDayArrayAdapter.getToday());
时间数字adapter
public class MyNumericWheelAdapter extends NumericWheelAdapter {
public MyNumericWheelAdapter(Context context, int minValue, int maxValue,
String format) {
super(context, minValue, maxValue, format);
// TODO Auto-generated constructor stub
this.minValue = minValue;
this.maxValue = maxValue;
this.format = format;
}
// Values
private int minValue;
private int maxValue;
// format
private String format;
@Override
public CharSequence getItemText(int index) {
if (index >= 0 && index < getItemsCount()) {
int value = index*5;
return format != null ? String.format(format, value) : Integer.toString(value);
}
return null;
}
@Override
public int getItemsCount() {
// return maxValue - minValue + 1;
return 12;
}
日期的adapter
public class MyDayArrayAdapter extends AbstractWheelTextAdapter{
// Count of days to be shown
private final int daysCount = 18;
// Calendar
private Calendar calendar;
private DateFormat format1 = new SimpleDateFormat("dd日");
private DateFormat format2 = new SimpleDateFormat("yyyy年MM月");
private DateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd");
/**
* Constructor
*/
protected MyDayArrayAdapter(Context context, Calendar calendar) {
super(context, R.layout.time_picker_custom_day, NO_RESOURCE);
this.calendar = calendar;
setItemTextResource(R.id.time2_monthday);
}
public int getToday() {
return daysCount / 2;
}
@Override
public View getItem(int index, View cachedView, ViewGroup parent) {
int day = -daysCount/2 + index;
Calendar newCalendar = (Calendar) calendar.clone();
newCalendar.add(Calendar.DAY_OF_YEAR, day);
View view = super.getItem(index, cachedView, parent);
TextView weekday = (TextView) view.findViewById(R.id.time2_day);
weekday.setText(format1.format(newCalendar.getTime()));
TextView monthday = (TextView) view.findViewById(R.id.time2_monthday);
if (day == 0) {
// monthday.setText("Today");
monthday.setTextColor(0xFF60BDFF);
weekday.setTextColor(0xFF60BDFF);
} else {
monthday.setTextColor(0xFF111111);
weekday.setTextColor(0xFF111111);
}
monthday.setText(format2.format(newCalendar.getTime()));
view.setTag(dFormat.format(newCalendar.getTime()));
return view;
}
/**
* 一共有多少行数据
*/
@Override
public int getItemsCount() {
return daysCount + 1;
}
/**
* 获取当前行的数据
*/
@Override
protected CharSequence getItemText(int index) {
if (index >= 0 && index < getItemsCount()) {
Calendar nCalendar = (Calendar) calendar.clone();
nCalendar.add(Calendar.DAY_OF_YEAR, -daysCount/2 + index);
return dFormat.format(nCalendar.getTime());
}
return TimeUtil.currentLocalDateString();
}
}
还有其他的用法,暂时只用到时间日期的显示和选择,不管怎么样,问题解决才是重点。
我为自己写博客O(∩_∩)O~