Skip to content

Commit a61184a

Browse files
author
杨宏伟
committed
增加时分秒范围控制
1 parent a19eaae commit a61184a

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ public void onClick(View v) {
9696
if (v.getId() == R.id.btn_Time && pvTime != null) {
9797
// pvTime.setDate(Calendar.getInstance());
9898
/* pvTime.show(); //show timePicker*/
99+
initTimePicker();
100+
Calendar date = Calendar.getInstance();
101+
date.set(2020, 1, 23, 12, 10, 30);
102+
pvTime.setDate(date);
99103
pvTime.show(v);//弹出时间选择器,传递参数过去,回调的时候则可以绑定此view
100104
} else if (v.getId() == R.id.btn_Options && pvOptions != null) {
101105
pvOptions.show(); //弹出条件选择器
@@ -124,7 +128,7 @@ private void initLunarPicker() {
124128
Calendar startDate = Calendar.getInstance();
125129
startDate.set(2014, 1, 23);
126130
Calendar endDate = Calendar.getInstance();
127-
endDate.set(2069, 2, 28);
131+
// endDate.set(2069, 2, 28);
128132
//时间选择器 ,自定义布局
129133
pvCustomLunar = new TimePickerBuilder(this, new OnTimeSelectListener() {
130134
@Override
@@ -186,7 +190,7 @@ private void setTimePickerChildWeight(View v, float yearWeight, float weight) {
186190
}
187191
}
188192
})
189-
.setType(new boolean[]{true, true, true, false, false, false})
193+
.setType(new boolean[]{true, true, true, true, false, false})
190194
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
191195
.setDividerColor(Color.RED)
192196
.build();
@@ -195,11 +199,11 @@ private void setTimePickerChildWeight(View v, float yearWeight, float weight) {
195199

196200
private void initTimePicker() {//Dialog 模式下,在底部弹出
197201
Calendar startDate = Calendar.getInstance();
198-
startDate.set(2000, 1, 23, 12, 10, 30);
202+
startDate.set(2020, 1, 23, 12, 10, 30);
199203
pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
200204
@Override
201205
public void onTimeSelect(Date date, View v) {
202-
Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
206+
// Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
203207
Log.i("pvTime", "onTimeSelect");
204208

205209
}
@@ -210,7 +214,7 @@ public void onTimeSelectChanged(Date date) {
210214
Log.i("pvTime", "onTimeSelectChanged");
211215
}
212216
})
213-
.setType(new boolean[]{true, true, true, true, true, false})
217+
.setType(new boolean[]{true, true, true, true, true, true})
214218
.isDialog(true) //默认设置false ,内部实现将DecorView 作为它的父控件。
215219
.addOnCancelClickListener(new View.OnClickListener() {
216220
@Override
@@ -221,7 +225,8 @@ public void onClick(View view) {
221225
.setItemVisibleCount(5) //若设置偶数,实际值会加1(比如设置6,则最大可见条目为7)
222226
.setLineSpacingMultiplier(2.0f)
223227
.isAlphaGradient(true)
224-
.setRangDate(startDate, Calendar.getInstance())
228+
// .setDate(startDate)
229+
.setRangDate(null, Calendar.getInstance())
225230
.build();
226231

227232
Dialog mDialog = pvTime.getDialog();

pickerview/src/main/java/com/bigkoo/pickerview/view/WheelTime.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.bigkoo.pickerview.view;
22

3+
import android.util.Log;
34
import android.view.View;
45

56
import com.bigkoo.pickerview.R;
@@ -388,13 +389,21 @@ private void setSolar(int year, final int month, int day, int h, int m, int s) {
388389
wv_hours.setGravity(gravity);
389390
//分
390391
wv_minutes = (WheelView) view.findViewById(R.id.min);
391-
wv_minutes.setAdapter(new NumericWheelAdapter(0, endMinute));
392+
if (year < endYear || month + 1 < endMonth || day < endDay || h < endHour || m < endMinute) {
393+
wv_minutes.setAdapter(new NumericWheelAdapter(0, DEFAULT_END_SECOND));
394+
} else {
395+
wv_minutes.setAdapter(new NumericWheelAdapter(0, endMinute));
396+
}
392397

393398
wv_minutes.setCurrentItem(m);
394399
wv_minutes.setGravity(gravity);
395400
//秒
396401
wv_seconds = (WheelView) view.findViewById(R.id.second);
397-
wv_seconds.setAdapter(new NumericWheelAdapter(0, endSecond));
402+
if (year < endYear || month + 1 < endMonth || day < endDay || h < endHour || m < endMinute || s < endSecond) {
403+
wv_seconds.setAdapter(new NumericWheelAdapter(0, DEFAULT_END_SECOND));
404+
} else {
405+
wv_seconds.setAdapter(new NumericWheelAdapter(0, endSecond));
406+
}
398407

399408
wv_seconds.setCurrentItem(s);
400409
wv_seconds.setGravity(gravity);
@@ -603,8 +612,8 @@ private void setReDay(int year_num, int monthNum, int startD, int endD, List<Str
603612

604613
if (currentItem > wv_day.getAdapter().getItemsCount() - 1) {
605614
currentItem = wv_day.getAdapter().getItemsCount() - 1;
606-
wv_day.setCurrentItem(currentItem);
607615
}
616+
wv_day.setCurrentItem(currentItem);
608617
}
609618

610619
private void setReHour() {
@@ -616,12 +625,15 @@ private void setReHour() {
616625
int month = calendar.get(Calendar.MONTH) + 1;
617626
int day = calendar.get(Calendar.DAY_OF_MONTH);
618627

628+
int position = wv_hours.getCurrentItem();
619629
if (year < endYear || month < endMonth || day < endDay) {
620630
wv_hours.setAdapter(new NumericWheelAdapter(0, DEFAULT_END_HOUR));
621631
} else {
622632
wv_hours.setAdapter(new NumericWheelAdapter(0, endHour));
623-
wv_hours.setCurrentItem(wv_hours.getMaxValue());
624633
}
634+
635+
wv_hours.setCurrentItem(Math.min(position, wv_hours.getItemsCount() - 1));
636+
625637
setReMinute();
626638
} catch (ParseException e) {
627639
e.printStackTrace();
@@ -638,12 +650,13 @@ private void setReMinute() {
638650
int day = calendar.get(Calendar.DAY_OF_MONTH);
639651
int h = calendar.get(Calendar.HOUR_OF_DAY);
640652

653+
int position = wv_minutes.getCurrentItem();
641654
if (year < endYear || month < endMonth || day < endDay || h < endHour) {
642655
wv_minutes.setAdapter(new NumericWheelAdapter(0, DEFAULT_END_MINUTE));
643656
} else {
644657
wv_minutes.setAdapter(new NumericWheelAdapter(0, endMinute));
645-
wv_minutes.setCurrentItem(wv_minutes.getMaxValue());
646658
}
659+
wv_minutes.setCurrentItem(Math.min(position, wv_minutes.getItemsCount() - 1));
647660
setReSecond();
648661
} catch (ParseException e) {
649662
e.printStackTrace();
@@ -660,12 +673,13 @@ private void setReSecond() {
660673
int day = calendar.get(Calendar.DAY_OF_MONTH);
661674
int h = calendar.get(Calendar.HOUR_OF_DAY);
662675
int m = calendar.get(Calendar.MINUTE);
676+
int position = wv_seconds.getCurrentItem();
663677
if (year < endYear || month < endMonth || day < endDay || h < endHour || m < endMinute) {
664678
wv_seconds.setAdapter(new NumericWheelAdapter(0, DEFAULT_END_SECOND));
665679
} else {
666680
wv_seconds.setAdapter(new NumericWheelAdapter(0, endSecond));
667-
wv_seconds.setCurrentItem(wv_seconds.getMaxValue());
668681
}
682+
wv_seconds.setCurrentItem(Math.min(position, wv_seconds.getItemsCount() - 1));
669683
} catch (ParseException e) {
670684
e.printStackTrace();
671685
}

0 commit comments

Comments
 (0)