package com.itbox.grzl.activity; import java.util.Calendar; import java.util.Date; import com.itbox.fx.util.DateUtil; import com.zhaoliewang.grzl.R; import kankan.wheel.widget.OnWheelChangedListener; import kankan.wheel.widget.WheelView; import kankan.wheel.widget.adapters.ArrayWheelAdapter; import kankan.wheel.widget.adapters.IntWheelAdapter; import kankan.wheel.widget.adapters.NumericWheelAdapter; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; /** * 设置时间(月日时,需指定范围) * * @author HYH create at:2013-4-8 下午01:08:40 */ public class SelectTimeMinuteActivity extends SelectAbstractActivity implements OnClickListener, OnWheelChangedListener { public static class Extra{ public static final String SelectedID = "selected_id"; public static final String SelectedItem = "selected_item"; public static final String SelectedItemStr = "selected_item_string"; public static final String SelectedTime = "selected_time_millis"; public static final String SelectedTimeStr = "selected_time_String"; public static final String Time_Earliest = "earliest_time"; public static final String Time_Latest = "latest_time"; public static final String Time_EarliestStr = "earliest_time_string"; public static final String Time_LatestStr = "latest_time_string"; } private WheelView monthWheel; private WheelView dayWheel; private WheelView hourWheel; private WheelView minuteWheel; private int dayNum; private int years[]; private int months[]; private int days[]; private int hours[]; private int minutes[]; private int firstDay; private int lastDay; private int firstMonth; private int lastMonth; private int firstYear; private int lastYear; private int firstHour; private int lastHour; private int firstMinute; private int lastMinute; private Calendar currentCal; private int currentDay = 0; private String currentHour; private String currentMinute; private TextView tvYear; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_select_minute_time); setSelectView(findViewById(R.id.wheel_layout)); tvYear = (TextView) findViewById(R.id.wheel_tv_year); currentCal = DateUtil.getNewCalendar(); monthWheel = (WheelView) findViewById(R.id.wheel_view_month); dayWheel = (WheelView) findViewById(R.id.wheel_view_day); hourWheel = (WheelView) findViewById(R.id.wheel_view_hour); minuteWheel = (WheelView) findViewById(R.id.wheel_view_minute); findViewById(R.id.wheel_ok).setOnClickListener(this); findViewById(R.id.wheel_cancel).setOnClickListener(this); firstMonth = currentCal.get(Calendar.MONTH) + 1; if (firstMonth ==12) { lastMonth = 1; } if (currentCal.get(Calendar.MONTH) + 1 == 12 && currentCal.get(Calendar.DAY_OF_MONTH) == 31) { months = new int[2]; months[0] = firstMonth; months[1] = lastMonth; firstYear = currentCal.get(Calendar.YEAR); lastYear = firstYear + 1; } else { months = new int[1]; months[0] = firstMonth; firstYear = currentCal.get(Calendar.YEAR); } tvYear.setText(firstYear+""); initDate(); } private void initDate() { // year firstDay = currentCal.get(Calendar.DAY_OF_MONTH); lastDay = currentCal.get(Calendar.DATE) + 1; if (lastDay>currentCal.getMaximum(Calendar.MONTH)) { lastDay=1; } if (lastDay==1) { days = new int[1]; days[0] = firstDay; }else { days = new int[2]; days[0] = firstDay; days[1] = lastDay; } firstHour = currentCal.get(Calendar.HOUR_OF_DAY); lastHour = 23; firstMinute = currentCal.get(Calendar.MINUTE); if ((firstMinute + 40) < 60) { firstMinute += 40; } else { firstMinute = firstMinute + 40 - 60; firstHour+=1; } lastMinute = 59; monthWheel.setViewAdapter(new IntWheelAdapter(this, months, " 月")); dayWheel.setViewAdapter(new IntWheelAdapter(this, days, "日")); hourWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstHour, lastHour), "时")); minuteWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstMinute, lastMinute), "分")); monthWheel.addChangingListener(this); dayWheel.addChangingListener(this); hourWheel.addChangingListener(this); minuteWheel.addChangingListener(this); show(); } @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { // TODO Auto-generated method stub switch (wheel.getId()) { case R.id.wheel_view_month: changeMonth(newValue); changeHour(newValue); changeMinute(0); dayWheel.setViewAdapter(new IntWheelAdapter(this, days, "日")); hourWheel.setCurrentItem(0); hourWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstHour, lastHour), "时")); minuteWheel.setCurrentItem(0); minuteWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstMinute, lastMinute), "分")); break; case R.id.wheel_view_day: changeHour(newValue); changeMinute(0); hourWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstHour, lastHour), "时")); hourWheel.setCurrentItem(0); minuteWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstMinute, lastMinute), "分")); break; case R.id.wheel_view_hour: changeMinute(newValue); minuteWheel.setViewAdapter(new IntWheelAdapter(this, getRiseArray(firstMinute, lastMinute), "分")); minuteWheel.setCurrentItem(0); break; case R.id.wheel_view_minute: break; } } public void newHours(int num, int firsHour) { hours = new int[num]; for (int i = 0; i < num - 1; i++) { hours[i] = firsHour; firsHour++; } } public void newMinutes(int num, int firstMinute) { minutes = new int[num]; for (int i = 0; i < num; i++) { hours[i] = firstMinute; firstMinute++; } } public void changeMonth(int newValue){ if (newValue==1) { days[0] = 1; firstYear = currentCal.get(Calendar.YEAR)+1; tvYear.setText(firstYear+""); }else { days[0] = firstDay; firstYear = currentCal.get(Calendar.YEAR); tvYear.setText(firstYear+""); } } public void changeHour(int newValue) { if (newValue == 1) { lastHour = firstHour; firstHour = 0; // newHours(lastHour-firstHour+1, firstHour); currentDay = 1; } else { firstHour = currentCal.get(Calendar.HOUR_OF_DAY); firstMinute = currentCal.get(Calendar.MINUTE); if ((firstMinute + 40) < 60) { } else { firstHour+=1; } lastHour = 23; // newHours(lastHour-firstHour+1, firstHour); currentDay = 0; } } public void changeMinute(int newValue) { if (currentDay == 0) { if (newValue != 0) { lastMinute = 59; firstMinute = 0; } else { firstMinute = currentCal.get(Calendar.MINUTE); if ((firstMinute + 40) < 60) { firstMinute += 40; } else { firstMinute = firstMinute + 40 - 60; } lastMinute = 59; } // newMinutes(lastMinute-firstMinute+1, firstMinute); } else { if (newValue == (currentCal.get(Calendar.HOUR_OF_DAY)+1)) { firstMinute = 0; lastMinute = currentCal.get(Calendar.MINUTE); } else { lastMinute = 59; firstMinute = 0; } // newMinutes(lastMinute-firstMinute+1, firstMinute); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.wheel_ok: currentHour = hourWheel.getCurrentItem() + firstHour + ""; currentMinute = minuteWheel.getCurrentItem() + firstMinute + ""; // if ((hourWheel.getCurrentItem()+firstHour+"").length()==1) { // currentHour = "0"+hourWheel.getCurrentItem()+firstHour; // } // if ((minuteWheel.getCurrentItem()+firstMinute+"").length()==1) { // currentMinute = "0"+minuteWheel.getCurrentItem()+firstMinute; // } String time = firstYear + "-" + months[monthWheel.getCurrentItem()] + "-" + days[dayWheel.getCurrentItem()] + " " + currentHour + ":" + currentMinute + ":00"; long timeMills = DateUtil.parseDate(time); Intent data = new Intent(); data.putExtra(Extra.SelectedTime, timeMills); setResult(RESULT_OK, data); dismiss(); break; case R.id.wheel_cancel: dismiss(); break; } } public static int[] getRiseArray(int begin, int end) { int length = end - begin + 1; int[] array = new int[length]; for (int i = 0; i < length; i++) { array[i] = begin + i; } return array; } }