多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > android:最簡單的方式實現自定義選擇時間分鐘間隔,非滾輪方式

android:最簡單的方式實現自定義選擇時間分鐘間隔,非滾輪方式

來源:程序員人生   發布時間:2015-04-08 08:21:34 閱讀次數:2526次

目前項目只需要分鐘的間隔,所以小時和月的間隔沒有做,spiner有坑,做的不好,以后有空再重寫1下;

解釋參數

private int MAX_LIMITE_DAY = 30;//最大可選日期
private int EVERY_MININTES_SPCE= 10;//分鐘間隙
private int MIN_MININTES_AFTER = 15;//當前時間到最近可用時間的間隔(最小時間段);

最小時間間隔的解釋,

如果分鐘間隙為1,最小間隔是1,那末就是自然分鐘數1⑸9;


最小間隔15分鐘 如果當前時間是10:00 那末最近1次可用的時間為 10:20,由于分鐘每10分鐘1個檔,15分鐘在第2檔;

最小間隔15分鐘 如果當前時間是10:40 那末最近1次可用的時間為 11:00;


最小間隔10分鐘 如果當前世界是10:00,那末最近1次可用的時間為 11:10;10分鐘1個檔;

代碼

package com.idonoo.shareCar.ui.commom.activitys; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import com.idonoo.frame.model.BookTimeRule; import com.idonoo.shareCar.R; import com.idonoo.shareCar.app.IntentExtra; import com.idonoo.shareCar.uiframe.BaseActivity; public class TimePickerActivity extends BaseActivity { private int MAX_LIMITE_DAY = 30;//最大可選日期 private int EVERY_MININTES_SPCE= 10;//分鐘間隙 private int MIN_MININTES_AFTER = 15;//最小時間段 private List<String> listDates = new ArrayList<String>(), listHours = new ArrayList<String>(), listMinuts = new ArrayList<String>(); private Spinner spDate, spHour, spMinute; private ArrayAdapter<String> datesAdapter, hourAdapter, minuteAdapter; private TextView tvChooseTip; private Calendar calendar; private int currentYear; private int currentMonth; private int currentDay; private int currentHour; private int currentMinute; private boolean isAddNewHour = false,isOnlyHour=false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_picker_time); initDefultBookTime(); initUI(); initData(); } @Override protected void initUI() { super.initUI(); TextView tvCacel = (TextView) findViewById(R.id.cacel); TextView tvSelect = (TextView) findViewById(R.id.select); tvCacel.setOnClickListener(viewListener); tvSelect.setOnClickListener(viewListener); findViewById(R.id.linear_empty).setOnClickListener(viewListener); spDate = (Spinner) findViewById(R.id.sp_date); spHour = (Spinner) findViewById(R.id.sp_hour); spMinute = (Spinner) findViewById(R.id.sp_minut); datesAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.layout_spinner_item_text, R.id.tv_spinner_text, listDates); spDate.setAdapter(datesAdapter); hourAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.layout_spinner_item_text, R.id.tv_spinner_text, listHours); spHour.setAdapter(hourAdapter); minuteAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.layout_spinner_item_text, R.id.tv_spinner_text, listMinuts); spMinute.setAdapter(minuteAdapter); tvChooseTip = ((TextView)findViewById(R.id.tv_choose_tip)); tvChooseTip.setText("可預約"+MIN_MININTES_AFTER+"分鐘后,"+MAX_LIMITE_DAY+"天內的車輛"); setViewClickListener(viewListener, R.id.tv_add_day,R.id.tv_add_hour,R.id.tv_add_minute,R.id.tv_sub_day,R.id.tv_sub_hour,R.id.tv_sub_minute); } private void initDefultBookTime() { int max = BookTimeRule.getBookMaxTime(); if(max > 0) { MAX_LIMITE_DAY = max; } int min = BookTimeRule.getBookMinTime(); if(min > 0 ) { MIN_MININTES_AFTER = min; } int interval = BookTimeRule.getBookIntervalTime(); if(interval > 0) { EVERY_MININTES_SPCE = interval; } } @Override protected void initData() { calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); currentYear = calendar.get(Calendar.YEAR); currentMonth = calendar.get(Calendar.MONTH); currentDay = calendar.get(Calendar.DAY_OF_MONTH); currentHour = calendar.get(Calendar.HOUR_OF_DAY); currentMinute = calendar.get(Calendar.MINUTE); spDate.setOnItemSelectedListener(itemSelectListener); spHour.setOnItemSelectedListener(itemSelectListener); spMinute.setOnItemSelectedListener(itemSelectListener); isOnlyHour=getIntent().getBooleanExtra("OnlyHour", false); if(isOnlyHour){ calendar.add(Calendar.DAY_OF_MONTH, 1); for (int i = 0; i < 24; i++) { listHours.add(i + "點"); } tvChooseTip.setText("請選擇1個時間點"); findViewById(R.id.tv_add_day).setVisibility(View.GONE); findViewById(R.id.tv_add_minute).setVisibility(View.GONE); findViewById(R.id.tv_sub_hour).setVisibility(View.GONE); findViewById(R.id.tv_sub_minute).setVisibility(View.GONE); spDate.setVisibility(View.GONE); spMinute.setVisibility(View.GONE); hourAdapter.notifyDataSetChanged(); }else{ initDates(); } } private void initDates() { isAddNewHour = false; initHours(); Calendar day = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); listDates.clear(); for (int i=0; i < MAX_LIMITE_DAY; i++) { if(isAddNewHour&¤tHour==23){ day.add(Calendar.DAY_OF_MONTH, 1); listDates.add(buildDay(day)); }else{ listDates.add(buildDay(day)); day.add(Calendar.DAY_OF_MONTH, 1); } } datesAdapter.notifyDataSetChanged(); } private void initHours(){ isAddNewHour=false; listMinuts.clear(); listHours.clear(); buildMinutes(currentMinute,true); if(isAddNewHour) { for (int i = currentHour+1; i < 24; i++) { listHours.add(i + "點"); } calendar.set(Calendar.HOUR_OF_DAY, currentHour+1); }else{ for (int i = currentHour; i < 24; i++) { listHours.add(i + "點"); } calendar.set(Calendar.HOUR_OF_DAY, currentHour); } hourAdapter.notifyDataSetChanged(); minuteAdapter.notifyDataSetChanged(); } private String buildDay(Calendar calendar) { int day = calendar.get(Calendar.DAY_OF_MONTH); int month = calendar.get(Calendar.MONTH); int week = calendar.get(Calendar.DAY_OF_WEEK); Calendar tCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); int today = tCalendar.get(Calendar.DAY_OF_MONTH); int tmonth= tCalendar.get(Calendar.MONTH); int space = day - today; if(tmonth!=month) space = ⑴; String tweek = ""; switch (space) { case 0: tweek ="今天"; break; case 1: tweek ="明天"; break; case 2: tweek ="后天"; break; default: { switch (week) { case 2: tweek ="周1"; break; case 3: tweek ="周2"; break; case 4: tweek ="周3"; break; case 5: tweek ="周4"; break; case 6: tweek ="周5"; break; case 7: tweek ="周6"; break; case 1: tweek ="周日"; break; } } break; } StringBuilder text = new StringBuilder(); text.append(month + 1).append("月"); text.append(day).append("日"); text.append("("); text.append(tweek); text.append(")"); return text.toString(); } private void buildMinutes(int giveMinutes,boolean isAssociateHour) { int destMinute = giveMinutes+MIN_MININTES_AFTER; if(giveMinutes==⑴) destMinute = ⑴; if(isAssociateHour){//初版版本問題,先這樣吧; if(destMinute>=60){ destMinute = destMinute - 60; isAddNewHour = true; } else{ isAddNewHour = false; } } listMinuts.clear(); int skip = (int)Math.ceil(Double.valueOf(destMinute)/Double.valueOf(EVERY_MININTES_SPCE)); int startIndex = EVERY_MININTES_SPCE*skip; if(startIndex==60){ startIndex = 0; isAddNewHour = true; } for(int index = startIndex;index<=59;index+=EVERY_MININTES_SPCE){ if(index<0) continue; listMinuts.add(buildTimeTextExt(index)+"分"); } } private String buildTimeText() { StringBuilder text = new StringBuilder(); text.append(calendar.get(Calendar.MONTH) + 1).append("月"); text.append(buildTimeTextExt(calendar.get(Calendar.DAY_OF_MONTH))).append( "日"); text.append(buildTimeTextExt(calendar.get(Calendar.HOUR_OF_DAY))).append( ":"); text.append(buildTimeTextExt(calendar.get(Calendar.MINUTE))); return text.toString(); } private String buildTimeTextExt(int value) { if (value < 10) return "0" + value; else return value + ""; } private View.OnClickListener viewListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.cacel: finish(); break; case R.id.linear_empty: case R.id.select: calendar.set(Calendar.SECOND,0); Intent intent = new Intent(); intent.putExtra(IntentExtra.EXTRA_TIME_TEXT, buildTimeText()); intent.putExtra(IntentExtra.EXTRA_DEPART_TIME, calendar); setResult(Activity.RESULT_OK, intent); finish(); break; case R.id.tv_add_day: break; case R.id.tv_add_hour: break; case R.id.tv_add_minute: break; case R.id.tv_sub_day: break; case R.id.tv_sub_hour: break; case R.id.tv_sub_minute: break; } } }; private void rebuildDates(Calendar calendar) { listHours.clear(); listMinuts.clear(); int checkDay=calendar.get(Calendar.DAY_OF_MONTH); int checkHour=calendar.get(Calendar.HOUR_OF_DAY); int checkMinute=calendar.get(Calendar.MINUTE); //選擇今天 if (currentDay==checkDay&¤tHour == checkHour) { initDates(); }else if(currentDay==checkDay){ //天相同,但是初始化時被加過1天,重新計算小時和分鐘數 if(isAddNewHour&¤tHour==checkHour⑴){ initHours(); }else{ //如果被加過1天,跳過已加過的那天 int hour=isAddNewHour?currentHour+1:currentHour; rebuildDates(hour, ⑴, checkHour, checkMinute); } }else{ rebuildDates(0,⑴, checkHour, checkMinute); } } private void rebuildDates(int hour,int minute,int checkHour,int checkMinute){ for (int i = hour; i < 24; i++) { listHours.add(i + "點"); } buildMinutes(minute, false); hourAdapter.notifyDataSetChanged(); minuteAdapter.notifyDataSetChanged(); if(!isOnlyHour){ int hours = checkHour; int mnites =currentMinute; try{ hours = Integer.parseInt(spHour.getSelectedItem().toString().replace("點", "").trim()); mnites = Integer.parseInt(spMinute.getSelectedItem().toString().replace("分", "").trim()); }catch(Exception ex){ } calendar.set(Calendar.HOUR_OF_DAY, hours); calendar.set(Calendar.MINUTE, mnites); } } private OnItemSelectedListener itemSelectListener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (parent.getId()) { case R.id.sp_date: int selectDay=currentDay + position; if(position!=0&&isAddNewHour&¤tHour==23) selectDay=selectDay+1; calendar.set(Calendar.YEAR, currentYear); calendar.set(Calendar.MONTH, currentMonth); calendar.set(Calendar.DAY_OF_MONTH,selectDay); rebuildDates(calendar); break; case R.id.sp_hour: int hour = Integer.parseInt(parent.getItemAtPosition(position).toString().replace("點", "").trim()); calendar.set(Calendar.HOUR_OF_DAY, hour); rebuildDates(calendar); break; case R.id.sp_minut: int mnite = Integer.parseInt(parent.getItemAtPosition(position).toString().replace("分", "").trim()); calendar.set(Calendar.MINUTE, mnite); break; } } @Override public void onNothingSelected(AdapterView<?> parent) { } }; @Override public void finish() { super.finish(); overridePendingTransition(R.anim.slide_in_top, R.anim.slide_out_bottom); } }


效果圖






生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产麻豆自拍 | 日本一级α一片免费视频 | 18岁免费网站 | 啄木乌欧美一区二区三区 | 18一20岁一级毛片 | 99国产精品欧美久久久久久影院 | 日韩欧美亚洲综合 | 亚洲欧美一二三区 | 国产又黄又免费aaaa视频 | 国产精品欧美韩国日本久久 | 日韩一区精品 | 国产精品久久久久久久y | 老司机成人在线视频 | 最新日本一级中文字幕 | 久久精品久久精品久久精品 | 国产福利网站 | 亚洲天堂久 | 国内精品久久影院 | 亚洲不卡视频 | 一级做a爰全过程免费视频毛片 | 中文字幕曰韩一区二区不卡 | 国产偷v国产偷v亚洲高清 | 视频在线观看高清免费 | 日本久久综合 | 日韩在线手机看片免费看 | 国外处破女一区二区 | 日本免费一区二区三区最新vr | 免费精品在线观看 | 亚洲国产精品久久久久久网站 | 最新亚洲精品 | www.欧美色 | 国产一区二区三区在线免费 | 欧美成人18 | 日韩国产欧美 | 日本成人在线网址 | 伊人a.v在线| 日韩啊v| 黄网站色网址 | 亚洲精品不卡视频 | 国产色综合久久无码有码 | www日本免费 |