時(shí)間選擇

時(shí)間選擇器
如何選擇當(dāng)前時(shí)間之后的時(shí)間预麸,以當(dāng)前時(shí)間10分鐘后為例。
private String[] valuesHour = {"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11","12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"};
private String[] valuesMinute = {"00","01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11","12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24","25", "26", "27", "28", "29", "30","31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48","49", "50", "51","52", "53", "54", "55", "56", "57", "58", "59"};
private String[] valuesDays = {"今天", "明天"};

要點(diǎn):

  1. 使用原生控件NumberPicker
    numDayTv = (NumberPicker) view.findViewById(R.id.num_day);
    numHourTv = (NumberPicker) view.findViewById(R.id.num_hour);
    numMinute = (NumberPicker) view.findViewById(R.id.num_minute);

2.獲取10分鐘后的日期
Calendar calendar = Calendar.getInstance();
//將日歷的分鐘加10,得到10分鐘后的日歷
calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + 10);
//10分鐘后的小時(shí)
currentHourStr = calendar.get(Calendar.HOUR_OF_DAY)+ "";
//10分鐘后的分鐘
currentMinuteStr = calendar.get(Calendar.MINUTE) + "";
Date date = new Date(calendar.getTimeInMillis());
SimpleDateFormat format = new SimpleDateFormat("MM月dd日");
//得到10分鐘后的日期格式
dateStr = format.format(date);
//日期day 顯示
Date date1 = new Date(System.currentTimeMillis());
//今天的日期格式
todayDateStr = format.format(date1);

3.對(duì)10分鐘后是今天還是明天的相關(guān)判斷
numDayTv.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
if (!dateStr.equals(todayDateStr)) { //如果不是今天
List<String> stringDay = Arrays.asList(valuesDays);
ArrayList newDayList = new ArrayList();
for (int i = 0; i < valuesDays.length; i++) {
if (0 != i) { //獲得數(shù)組中今天之后的list
newDayList.add(stringDay.get(i));
}
}
newDay = (String[]) newDayList.toArray(new String[newDayList.size()]); //list轉(zhuǎn)化為array
numDayTv.setMaxValue(newDay.length - 1);
numDayTv.setMinValue(0);
numDayTv.setDisplayedValues(newDay);
numDayTv.setValue(0);//設(shè)置默認(rèn)值
dayStr = newDay[0];
} else { //是今天
numDayTv.setMaxValue(valuesDays.length - 1);
numDayTv.setMinValue(0);
numDayTv.setDisplayedValues(valuesDays);
numDayTv.setValue(0);
dayStr = valuesDays[0];
}

4.根據(jù)今天或明天對(duì)小時(shí)的顯示判斷
numHourTv.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
if ("今天".equals(valuesDays[numDayTv.getValue()])) {//是今天
//array轉(zhuǎn)化為list
List<String> stringHour = Arrays.asList(valuesHour);
//選擇>=當(dāng)前小時(shí)的list
ArrayList newHourList = new ArrayList();
for (int i = 0; i < valuesHour.length; i++) {
if (Integer.parseInt(stringHour.get(i)) >= Integer.parseInt(currentHourStr)){
newHourList.add(stringHour.get(i));
}
}
newHour = (String[]) newHourList.toArray(new String[newHourList.size()]);
numHourTv.setMaxValue(newHour.length - 1);
numHourTv.setMinValue(0);
numHourTv.setDisplayedValues(newHour);
numHourTv.setValue(0);
currentHourStr = newHour[0];
} else { //不是今天撵颊,0-23
numHourTv.setMaxValue(valuesHour.length - 1);
numHourTv.setMinValue(0);
numHourTv.setDisplayedValues(valuesHour);
numHourTv.setValue(0);
currentHourStr = valuesHour[0];
}

5.根據(jù)當(dāng)前的小時(shí)獲得分鐘數(shù)組
numMinute.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
if (currentHourStr.equals(newHour[numHourTv.getValue()])) {
List<String> stringMin = Arrays.asList(valuesMinute);
ArrayList newMinList = new ArrayList();
for (int i = 0; i < valuesMinute.length; i++) {
if (Integer.parseInt(stringMin.get(i)) >= Integer.parseInt(currentMinuteStr)) {
newMinList.add(stringMin.get(i));
}
}
newMin = (String[]) newMinList.toArray(new String[newMinList.size()]);
numMinute.setMaxValue(newMin.length - 1);
numMinute.setMinValue(0);
numMinute.setDisplayedValues(newMin);
numMinute.setValue(0);
currentMinuteStr = newMin[0];
} else {
numMinute.setMaxValue(valuesMinute.length - 1);
numMinute.setMinValue(0);
numMinute.setDisplayedValues(valuesMinute);
numMinute.setValue(0);
currentMinuteStr = valuesMinute[0];
}
setNumberPickerDividerColor(numDayTv);
setNumberPickerDividerColor(numHourTv);
setNumberPickerDividerColor(numMinute);

6.日期滾動(dòng)監(jiān)聽
numDayTv.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
//i表示前一個(gè)角標(biāo)值器净,i1表示當(dāng)前角標(biāo)值
Log.i("", "onValueChange: i=" + i + ",i1=" + i1);
timeSelect();//獲取10分鐘后時(shí)間
if (!dateStr.equals(todayDateStr)) {//獲得滾動(dòng)后的日期
dayStr = newDay[i1];
} else {
dayStr = valuesDays[i1];
}
if (0 == i1) { //角標(biāo)為0時(shí),獲得動(dòng)態(tài)的時(shí)分
List<String> strings = Arrays.asList(valuesHour);
ArrayList newHourList = new ArrayList();
for (int j = 0; j < valuesHour.length; j++) {
if (Integer.parseInt(strings.get(j)) >= Integer.parseInt(currentHourStr)) {
newHourList.add(strings.get(j));
}
}
newHour = (String[]) newHourList.toArray(new String[newHourList.size()]);
numHourTv.setMaxValue(newHour.length - 1);
numHourTv.setMinValue(0);
numHourTv.setDisplayedValues(newHour);
numHourTv.setValue(0);

        List<String> stringMin = Arrays.asList(valuesMinute);
        ArrayList newMinList = new ArrayList();
        for (int j = 0; j < valuesMinute.length; j++) {
            if (Integer.parseInt(stringMin.get(j)) >= Integer.parseInt(currentMinuteStr)) {
                newMinList.add(stringMin.get(j));
            }
        }
        newMin = (String[]) newMinList.toArray(new String[newMinList.size()]);
        numMinute.setMaxValue(newMin.length - 1);
        numMinute.setMinValue(0);
        numMinute.setDisplayedValues(newMin);
        numMinute.setValue(0);
    } else { //角標(biāo)不為0萍摊,時(shí)為0-23挤茄,分為0-59
        numMinute.setDisplayedValues(valuesMinute);
        numMinute.setMaxValue(valuesMinute.length - 1);
        numMinute.setMinValue(0);
        numMinute.setValue(0);


        numHourTv.setDisplayedValues(valuesHour);
        numHourTv.setMaxValue(valuesHour.length - 1);
        numHourTv.setMinValue(0);
        numHourTv.setValue(0);

    }
    if (0 == i1) { //獲得角標(biāo)為0的時(shí)分
        currentMinuteStr = newMin[0];
        currentHourStr = newHour[0];
    } else {
        currentMinuteStr = valuesMinute[0];
        currentHourStr = valuesHour[0];
    }

}

});

7.小時(shí)滾動(dòng)監(jiān)聽
numHourTv.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
timeSelect(); //獲取10分鐘后時(shí)間
//如果日期和小時(shí)角標(biāo)都為0時(shí),獲得動(dòng)態(tài)的分鐘數(shù)組
if (0 == i1 && 0 == numDayTv.getValue()) {
List<String> stringMin = Arrays.asList(valuesMinute);
ArrayList newMinList = new ArrayList();
for (int j = 0; j < valuesMinute.length; j++) {
if (Integer.parseInt(stringMin.get(j)) >= Integer.parseInt(currentMinuteStr)) {
newMinList.add(stringMin.get(j));
}
}
newMin = (String[]) newMinList.toArray(new String[newMinList.size()]);
numMinute.setMaxValue(newMin.length - 1);
numMinute.setMinValue(0);
numMinute.setDisplayedValues(newMin);
numMinute.setValue(0);
currentMinuteStr = newMin[0];
currentHourStr = newHour[i1];
} else { //分鐘數(shù)組為0-59
numMinute.setDisplayedValues(valuesMinute);
numMinute.setMaxValue(valuesMinute.length - 1);
numMinute.setMinValue(0);
numMinute.setValue(0);
currentMinuteStr = valuesMinute[0];
if (0 == numDayTv.getValue()) {
currentHourStr = newHour[i1];
} else {
currentHourStr = valuesHour[i1];
}

    }

}

});

8.分鐘滾動(dòng)監(jiān)聽
numMinute.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
if (0 == numDayTv.getValue() && 0 == numHourTv.getValue()) {
//日期和小時(shí)角標(biāo)為0時(shí)的分鐘
currentMinuteStr = newMin[i1];
} else {
currentMinuteStr = valuesMinute[i1];
}
}
});

//NumberPicker顏色設(shè)置
private void setNumberPickerDividerColor(NumberPicker numberPicker) {
NumberPicker picker = numberPicker;
Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDivider")) {
pf.setAccessible(true);
try {
//設(shè)置分割線的顏色值
pf.set(picker, new ColorDrawable(this.getResources().getColor(R.color.checkboxnormal)));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Resources.NotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
// 分割線高度
for (Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDividerHeight")) {
pf.setAccessible(true);
try {
int result = 1;
pf.set(picker, result);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冰木,一起剝皮案震驚了整個(gè)濱河市穷劈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踊沸,老刑警劉巖歇终,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逼龟,居然都是意外死亡评凝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門腺律,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奕短,“玉大人,你說我怎么就攤上這事匀钧〈鄯蹋” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵榴捡,是天一觀的道長杈女。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么达椰? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任翰蠢,我火速辦了婚禮,結(jié)果婚禮上啰劲,老公的妹妹穿的比我還像新娘梁沧。我一直安慰自己,他們只是感情好蝇裤,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布廷支。 她就那樣靜靜地躺著,像睡著了一般栓辜。 火紅的嫁衣襯著肌膚如雪恋拍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天藕甩,我揣著相機(jī)與錄音施敢,去河邊找鬼。 笑死狭莱,一個(gè)胖子當(dāng)著我的面吹牛僵娃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腋妙,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼默怨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骤素?” 一聲冷哼從身側(cè)響起匙睹,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谆甜,沒想到半個(gè)月后垃僚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集绰,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡规辱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栽燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罕袋。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碍岔,靈堂內(nèi)的尸體忽然破棺而出浴讯,到底是詐尸還是另有隱情,我是刑警寧澤蔼啦,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布榆纽,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奈籽。R本人自食惡果不足惜饥侵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衣屏。 院中可真熱鬧躏升,春花似錦、人聲如沸狼忱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钻弄。三九已至佃却,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斧蜕,已是汗流浹背双霍。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留批销,地道東北人洒闸。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像均芽,于是被迫代替她去往敵國和親丘逸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容