/*
* Copyright (C) 2012 www.amsoft.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ab.view.wheel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.ab.activity.AbActivity;
import com.ab.util.AbDateUtil;
import com.ab.util.AbDialogUtil;
import com.ab.util.AbStrUtil;
import com.ab.view.wheel.AbWheelView.AbOnWheelChangedListener;
// TODO: Auto-generated Javadoc
/**
* © 2012 amsoft.cn
* 名称:AbWheelUtil.java
* 描述:轮子工具类
*
* @author 还如一梦中
* @version v1.0
* @date:2013-05-17 下午6:46:29
*/
public class AbWheelUtil {
/**
* 描述:默认的年月日的日期选择器.
*
* @param activity AbActivity对象
* @param mText the m text
* @param mWheelViewY 选择年的轮子
* @param mWheelViewM 选择月的轮子
* @param mWheelViewD 选择日的轮子
* @param okBtn 确定按钮
* @param cancelBtn 取消按钮
* @param defaultYear 默认显示的年
* @param defaultMonth the default month
* @param defaultDay the default day
* @param startYear 开始的年
* @param endYearOffset 结束的年与开始的年的偏移
* @param initStart 轮子是否初始化默认时间为当前时间
*/
public static void initWheelDatePicker(final Activity activity,final TextView mText,final AbWheelView mWheelViewY,final AbWheelView mWheelViewM,final AbWheelView mWheelViewD,
Button okBtn,Button cancelBtn,
int defaultYear,int defaultMonth,int defaultDay,final int startYear,int endYearOffset,boolean initStart){
int endYear = startYear+endYearOffset;
// 添加大小月月份并将其转换为list,方便之后的判断
String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
String[] months_little = { "4", "6", "9", "11" };
//时间选择可以这样实现
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DATE);
if(initStart){
defaultYear = year;
defaultMonth = month;
defaultDay = day;
}
mText.setText(AbStrUtil.dateTimeFormat(defaultYear+"-"+defaultMonth+"-"+defaultDay));
final List<String> list_big = Arrays.asList(months_big);
final List<String> list_little = Arrays.asList(months_little);
//设置"年"的显示数据
mWheelViewY.setAdapter(new AbNumericWheelAdapter(startYear, endYear));
mWheelViewY.setCyclic(true);// 可循环滚动
mWheelViewY.setLabel("年"); // 添加文字
mWheelViewY.setCurrentItem(defaultYear - startYear);// 初始化时显示的数据
mWheelViewY.setValueTextSize(35);
mWheelViewY.setLabelTextSize(35);
mWheelViewY.setLabelTextColor(0x80000000);
//mWheelViewY.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 月
mWheelViewM.setAdapter(new AbNumericWheelAdapter(1, 12));
mWheelViewM.setCyclic(true);
mWheelViewM.setLabel("月");
mWheelViewM.setCurrentItem(defaultMonth-1);
mWheelViewM.setValueTextSize(35);
mWheelViewM.setLabelTextSize(35);
mWheelViewM.setLabelTextColor(0x80000000);
//mWheelViewM.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 日
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(month))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 30));
} else {
// 闰年
if (AbDateUtil.isLeapYear(year)){
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 29));
}else{
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 28));
}
}
mWheelViewD.setCyclic(true);
mWheelViewD.setLabel("日");
mWheelViewD.setCurrentItem(defaultDay - 1);
mWheelViewD.setValueTextSize(35);
mWheelViewD.setLabelTextSize(35);
mWheelViewD.setLabelTextColor(0x80000000);
//mWheelViewD.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 添加"年"监听
AbOnWheelChangedListener wheelListener_year = new AbOnWheelChangedListener() {
public void onChanged(AbWheelView wheel, int oldValue, int newValue) {
int year_num = newValue + startYear;
int mDIndex = mWheelViewM.getCurrentItem();
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(mWheelViewM.getCurrentItem() + 1))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(mWheelViewM.getCurrentItem() + 1))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 30));
} else {
if (AbDateUtil.isLeapYear(year_num))
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 29));
else
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 28));
}
mWheelViewM.setCurrentItem(mDIndex);
}
};
// 添加"月"监听
AbOnWheelChangedListener wheelListener_month = new AbOnWheelChangedListener() {
public void onChanged(AbWheelView wheel, int oldValue, int newValue) {
int month_num = newValue + 1;
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month_num))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(month_num))) {
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 30));
} else {
int year_num = mWheelViewY.getCurrentItem() + startYear;
if (AbDateUtil.isLeapYear(year_num))
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 29));
else
mWheelViewD.setAdapter(new AbNumericWheelAdapter(1, 28));
}
mWheelViewD.setCurrentItem(0);
}
};
mWheelViewY.addChangingListener(wheelListener_year);
mWheelViewM.addChangingListener(wheelListener_month);
okBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
int indexYear = mWheelViewY.getCurrentItem();
String year = mWheelViewY.getAdapter().getItem(indexYear);
int indexMonth = mWheelViewM.getCurrentItem();
String month = mWheelViewM.getAdapter().getItem(indexMonth);
int indexDay = mWheelViewD.getCurrentItem();
String day = mWheelViewD.getAdapter().getItem(indexDay);
mText.setText(AbStrUtil.dateTimeFormat(year+"-"+month+"-"+day));
}
});
cancelBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
}
});
}
/**
* 描述:默认的月日时分的时间选择器.
*
* @version v1.0
* @param activity Activity对象
* @param mText the m text
* @param mWheelViewMD 选择月日的轮子
* @param mWheelViewHH the m wheel view hh
* @param mWheelViewMM 选择分的轮子
* @param okBtn 确定按钮
* @param cancelBtn 取消按钮
* @param defaultYear the default year
* @param defaultMonth the default month
* @param defaultDay the default day
* @param defaultHour the default hour
* @param defaultMinute the default minute
* @param initStart the init start
* @date:2013-7-16 上午10:19:01
*/
public static void initWheelTimePicker(final AbActivity activity,final TextView mText,final AbWheelView mWheelViewMD,final AbWheelView mWheelViewHH,final AbWheelView mWheelViewMM,
Button okBtn,Button cancelBtn,
int defaultYear,int defaultMonth,int defaultDay,int defaultHour,int defaultMinute,boolean initStart){
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(initStart){
defaultYear = year;
defaultMonth = month;
defaultDay = day;
defaultHour = hour;
defaultMinute = minute;
}
String val = AbStrUtil.dateTimeFormat(defaultYear+"-"+defaultMonth+"-"+defaultDay+" "+defaultHour+":"+defaultMinute+":"+second) ;
mText.setText(val);
// 添加大小月月份并将其转换为list,方便之后的判断
String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
String[] months_little = { "4", "6", "9", "11" };
final List<String> list_big = Arrays.asList(months_big);
final List<String> list_little = Arrays.asList(months_little);
//
final List<String> textDMList = new ArrayList<String>();
final List<String> textDMDateList = new ArrayList<String>();
for(int i=1;i<13;i++){
if(list_big.contains(String.valueOf(i))){
for(int j=1;j<32;j++){
textDMList.add(i+"月"+" "+j+"日");
textDMDateList.add(defaultYear+"-"+i+"-"+j);
}
}else{
if(i==2){
if(AbDateUtil.isLeapYear(defaultYear)){
for(int j=1;j<28;j++){
textDMList.add(i+"月"+" "+j+"日");
textDMDateList.add(defaultYear+"-"+i+"-"+j);
}
}else{
for(int j=1;j<29;j++){
textDMList.add(i+"月"+" "+j+"日");
textDMDateList.add(defaultYear+"-"+i+"-"+j);
}
}
}else{
for(int j=1;j<29;j++){
textDMList.add(i+"月"+" "+j+"日");
textDMDateList.add(defaultYear+"-"+i+"-"+j);
}
}
}
}
String currentDay = defaultMonth+"月"+" "+defaultDay+"日";
int currentDayIndex = textDMList.indexOf(currentDay);
// 月日
mWheelViewMD.setAdapter(new AbStringWheelAdapter(textDMList,AbStrUtil.strLength("12月"+" "+"12日")));
mWheelViewMD.setCyclic(true);
mWheelViewMD.setLabel("");
mWheelViewMD.setCurrentItem(currentDayIndex);
mWheelViewMD.setValueTextSize(35);
mWheelViewMD.setLabelTextSize(35);
mWheelViewMD.setLabelTextColor(0x80000000);
//mWheelViewMD.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 时
mWheelViewHH.setAdapter(new AbNumericWheelAdapter(0, 23));
mWheelViewHH.setCyclic(true);
mWheelViewHH.setLabel("点");
mWheelViewHH.setCurrentItem(defaultHour);
mWheelViewHH.setValueTextSize(35);
mWheelViewHH.setLabelTextSize(35);
mWheelViewHH.setLabelTextColor(0x80000000);
//mWheelViewH.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 分
mWheelViewMM.setAdapter(new AbNumericWheelAdapter(0, 59));
mWheelViewMM.setCyclic(true);
mWheelViewMM.setLabel("分");
mWheelViewMM.setCurrentItem(defaultMinute);
mWheelViewMM.setValueTextSize(35);
mWheelViewMM.setLabelTextSize(35);
mWheelViewMM.setLabelTextColor(0x80000000);
//mWheelViewM.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
okBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
int index1 = mWheelViewMD.getCurrentItem();
int index2 = mWheelViewHH.getCurrentItem();
int index3 = mWheelViewMM.getCurrentItem();
String dmStr = textDMDateList.get(index1);
Calendar calendar = Calendar.getInstance();
int second = calendar.get(Calendar.SECOND);
String val = AbStrUtil.dateTimeFormat(dmStr+" "+index2+":"+index3+":"+second) ;
mText.setText(val);
}
});
cancelBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
}
});
}
/**
* 描述:默认的时分的时间选择器.
*
* @param activity Activity对象
* @param mText the m text
* @param mWheelViewHH the m wheel view hh
* @param mWheelViewMM 选择分的轮子
* @param okBtn 确定按钮
* @param cancelBtn 取消按钮
* @param defaultHour the default hour
* @param defaultMinute the default minute
* @param initStart the init start
*/
public static void initWheelTimePicker2(final Activity activity,final TextView mText,final AbWheelView mWheelViewHH,final AbWheelView mWheelViewMM,
Button okBtn,Button cancelBtn,
int defaultHour,int defaultMinute,boolean initStart){
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
if(initStart){
defaultHour = hour;
defaultMinute = minute;
}
String val = AbStrUtil.dateTimeFormat(defaultHour+":"+defaultMinute) ;
mText.setText(val);
// 时
mWheelViewHH.setAdapter(new AbNumericWheelAdapter(0, 23));
mWheelViewHH.setCyclic(true);
mWheelViewHH.setLabel("点");
mWheelViewHH.setCurrentItem(defaultHour);
mWheelViewHH.setValueTextSize(35);
mWheelViewHH.setLabelTextSize(35);
mWheelViewHH.setLabelTextColor(0x80000000);
//mWheelViewH.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
// 分
mWheelViewMM.setAdapter(new AbNumericWheelAdapter(0, 59));
mWheelViewMM.setCyclic(true);
mWheelViewMM.setLabel("分");
mWheelViewMM.setCurrentItem(defaultMinute);
mWheelViewMM.setValueTextSize(35);
mWheelViewMM.setLabelTextSize(35);
mWheelViewMM.setLabelTextColor(0x80000000);
//mWheelViewM.setCenterSelectDrawable(this.getResources().getDrawable(R.drawable.wheel_select));
okBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
int index2 = mWheelViewHH.getCurrentItem();
int index3 = mWheelViewMM.getCurrentItem();
String val = AbStrUtil.dateTimeFormat(index2+":"+index3) ;
mText.setText(val);
}
});
cancelBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AbDialogUtil.removeDialog(v.getContext());
}
});
}
}