package com.bigdo.controls; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Typeface; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bigdo.controls.wheel.widget.OnWheelChangedListener; import com.bigdo.controls.wheel.widget.OnWheelClickedListener; import com.bigdo.controls.wheel.widget.WheelView; import com.bigdo.controls.wheel.widget.adapters.ArrayWheelAdapter; import com.bigdo.controls.wheel.widget.adapters.NumericWheelAdapter; public class XYyyymmdd { public final static int minYear = 1000; Calendar calendar; Activity a; WheelView year, month, day; @SuppressLint("SimpleDateFormat") public XYyyymmdd(Activity a, WheelView year, WheelView month, WheelView day, String date) { this.a = a; this.year = year; this.month = month; this.day = day; calendar = Calendar.getInstance(); if (date != null && !date.equals("")) { date = date.replace('.', '-'); date = date.replace('/', '-'); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date s_date = (Date) sdf.parse(date); calendar.setTime(s_date); } catch (Exception e) { } } OnWheelChangedListener listener = new OnWheelChangedListener() { public void onChanged(WheelView wheel, int oldValue, int newValue) { updateDays(XYyyymmdd.this.year, XYyyymmdd.this.month, XYyyymmdd.this.day); } }; int curMonth = calendar.get(Calendar.MONTH); String months[] = new String[] { "01月", "02月", "03月", "04月", "05月", "06月", "07月", "08月", "09月", "10月", "11月", "12月" }; month.setViewAdapter(new DateArrayAdapter(a, months, curMonth)); month.setCurrentItem(curMonth); month.setCyclic(true); month.addChangingListener(listener); // year int curYear = calendar.get(Calendar.YEAR); if (curYear < minYear) { curYear = minYear; } else if (curYear > 9999) { curYear = 9998; } year.setViewAdapter(new DateNumericAdapter(a, minYear, 9999, curYear - minYear, "%1$s年")); year.setCurrentItem(curYear - minYear); year.setCyclic(true); year.addChangingListener(listener); // day updateDays(year, month, day); day.setCurrentItem(calendar.get(Calendar.DAY_OF_MONTH) - 1); day.setCyclic(true); OnWheelClickedListener click = new OnWheelClickedListener() { public void onItemClicked(WheelView wheel, int itemIndex) { wheel.setCurrentItem(itemIndex, true); } }; year.addClickingListener(click); month.addClickingListener(click); day.addClickingListener(click); } private void updateDays(WheelView year, WheelView month, WheelView day) { calendar.set(Calendar.YEAR, minYear + year.getCurrentItem()); calendar.set(Calendar.MONTH, month.getCurrentItem()); int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); day.setViewAdapter(new DateNumericAdapter(a, 1, maxDays, calendar .get(Calendar.DAY_OF_MONTH) - 1, "%1$02d日")); int curDay = Math.min(maxDays, day.getCurrentItem() + 1); day.setCurrentItem(curDay - 1, true); } /** * Adapter for numeric wheels. Highlights the current value. */ private class DateNumericAdapter extends NumericWheelAdapter { // Index of current item int currentItem; // Index of item to be highlighted int currentValue; /** * Constructor */ public DateNumericAdapter(Context context, int minValue, int maxValue, int current, String format) { super(context, minValue, maxValue, format); this.currentValue = current; setTextSize(16); } @Override protected void configureTextView(TextView view) { super.configureTextView(view); if (currentItem == currentValue) { view.setTextColor(0xFF0000F0); } view.setTypeface(Typeface.SANS_SERIF); } @Override public View getItem(int index, View cachedView, ViewGroup parent) { currentItem = index; return super.getItem(index, cachedView, parent); } } /** * Adapter for string based wheel. Highlights the current value. */ private class DateArrayAdapter extends ArrayWheelAdapter<String> { // Index of current item int currentItem; // Index of item to be highlighted int currentValue; /** * Constructor */ public DateArrayAdapter(Context context, String[] items, int current) { super(context, items); this.currentValue = current; setTextSize(16); } @Override protected void configureTextView(TextView view) { super.configureTextView(view); if (currentItem == currentValue) { view.setTextColor(0xFF0000F0); } view.setTypeface(Typeface.SANS_SERIF); } @Override public View getItem(int index, View cachedView, ViewGroup parent) { currentItem = index; return super.getItem(index, cachedView, parent); } } }