Android 滾動(dòng)時(shí)間選擇的示例代碼
效果圖 復(fù)制代碼直接用!?。。?br />


1.導(dǎo)入依賴
implementation 'com.bigkoo:pickerview:2.1.0'
2.三個(gè)bean類
PickerViewData
public class PickerViewData implements IPickerViewData {
private String content;
public PickerViewData(String content) {
this.content = content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String getPickerViewText() {
return content;
}
}
ProvinceBean
public class ProvinceBean implements IPickerViewData {
private long id;
private String name;
private String description;
private String others;
public ProvinceBean(long id,String name,String description,String others){
this.id = id;
this.name = name;
this.description = description;
this.others = others;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getOthers() {
return others;
}
public void setOthers(String others) {
this.others = others;
}
//這個(gè)用來顯示在PickerView上面的字符串,PickerView會(huì)通過IPickerViewData獲取getPickerViewText方法顯示出來。
@Override
public String getPickerViewText() {
return name;
}
}
TimeBean
public class TimeBean implements IPickerViewData {
private String time;
public TimeBean(String time) {
this.time = time;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String getPickerViewText() {
return time;
}
}
3,布局文件activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_margin="50dp"
android:id="@+id/tvTime"
android:text="時(shí)間"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<TextView
android:id="@+id/tvOptions"
android:layout_margin="50dp"
android:layout_below="@+id/tvTime"
android:text="條件"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<View
android:id="@+id/vMasker"
android:visibility="gone"
android:background="#e0000000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</RelativeLayout>
4.MainActivity
public class MainActivity extends Activity {
private ArrayList<TimeBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<IPickerViewData>>> options3Items = new ArrayList<>();
private TextView tvTime, tvOptions;
TimePickerView pvTime;
OptionsPickerView pvOptions;
View vMasker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vMasker=findViewById(R.id.vMasker);
tvTime=(TextView) findViewById(R.id.tvTime);
tvOptions=(TextView) findViewById(R.id.tvOptions);
//時(shí)間選擇器
pvTime = new TimePickerView(this, TimePickerView.Type.MONTH_DAY_HOUR_MIN);
//控制時(shí)間范圍
// Calendar calendar = Calendar.getInstance();
// pvTime.setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR));//要在setTime 之前才有效果哦
pvTime.setTime(new Date());
pvTime.setCyclic(false);
pvTime.setCancelable(true);
//時(shí)間選擇后回調(diào)
pvTime.setOnTimeSelectListener(new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date) {
tvTime.setText(getTime(date));
}
});
//彈出時(shí)間選擇器
tvTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvTime.show();
}
});
//選項(xiàng)選擇器
pvOptions = new OptionsPickerView(this);
//選項(xiàng)1
options1Items.add(new TimeBean("現(xiàn)在"));
options1Items.add(new TimeBean("今天"));
options1Items.add(new TimeBean("明天"));
options1Items.add(new TimeBean("后天"));
//選項(xiàng) 1 2
ArrayList<String> options2Items_01=new ArrayList<>();
options2Items_01.add("--");
//22
ArrayList<String> options2Items_02=getTodayHourData();
//32
ArrayList<String> options2Items_03=getHourData();
//32
ArrayList<String> options2Items_04=getHourData();
options2Items.add(options2Items_01);
options2Items.add(options2Items_02);
options2Items.add(options2Items_03);
options2Items.add(options2Items_04);
//選項(xiàng)3
ArrayList<ArrayList<IPickerViewData>> options3Items_01 = new ArrayList<>();
ArrayList<ArrayList<IPickerViewData>> options3Items_02 = new ArrayList<>();
ArrayList<ArrayList<IPickerViewData>> options3Items_03 = new ArrayList<>();
ArrayList<ArrayList<IPickerViewData>> options3Items_04 = new ArrayList<>();
ArrayList<IPickerViewData> options3Items_01_01=new ArrayList<>();
options3Items_01_01.add(new PickerViewData("--"));
options3Items_01.add(options3Items_01_01);
options3Items_02 =getmD2();
options3Items_03 =getmD();
options3Items_04 =getmD();
options3Items.add(options3Items_01);
options3Items.add(options3Items_02);
options3Items.add(options3Items_03);
options3Items.add(options3Items_04);
//三級(jí)聯(lián)動(dòng)效果
pvOptions.setPicker(options1Items, options2Items, options3Items, true);
//設(shè)置選擇的三級(jí)單位
// pwOptions.setLabels("省", "市", "區(qū)");
pvOptions.setTitle(" ");
pvOptions.setCyclic(false, false, false);
//設(shè)置默認(rèn)選中的三級(jí)項(xiàng)目
//監(jiān)聽確定選擇按鈕
pvOptions.setSelectOptions(0, 0, 0);
pvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3) {
//返回的分別是三個(gè)級(jí)別的選中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
vMasker.setVisibility(View.GONE);
}
});
//點(diǎn)擊彈出選項(xiàng)選擇器
tvOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pvOptions.show();
}
});
}
public static String getTime(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return format.format(date);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(pvOptions.isShowing()||pvTime.isShowing()){
pvOptions.dismiss();
pvTime.dismiss();
return true;
}
if(pvTime.isShowing()){
pvTime.dismiss();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
/**
* 今天 點(diǎn)
*/
private ArrayList<String> getTodayHourData(){
int max =currentHour();
if (max<23&¤tMin()>45){
max=max+1;
}
ArrayList<String> lists=new ArrayList<>();
for (int i=max;i<24;i++){
lists.add(i+"點(diǎn)");
}
return lists;
}
/**
* 明天 后天 點(diǎn)
*/
private ArrayList<String> getHourData(){
ArrayList<String> lists=new ArrayList<>();
for (int i=0;i<24;i++){
lists.add(i+"點(diǎn)");
}
return lists;
}
/**
* 明天 后天 分
*/
private ArrayList<IPickerViewData> getMinData(){
ArrayList<IPickerViewData> dataArrayList=new ArrayList<>();
for (int i=0;i<6;i++){
dataArrayList.add(new PickerViewData((i*10)+"分"));
}
return dataArrayList;
}
/**
* 明天 后天
*/
private ArrayList<ArrayList<IPickerViewData>> getmD(){
ArrayList<ArrayList<IPickerViewData>> d=new ArrayList<>();
for (int i=0;i<24;i++){
d.add(getMinData());
}
return d;
}
/**
* 明天 后天 2222
*/
private ArrayList<ArrayList<IPickerViewData>> getmD2(){
//14
int max =currentHour();
if (currentMin()>45){
max=max+1;
}
int value =24-max;
ArrayList<ArrayList<IPickerViewData>> d=new ArrayList<>();
for (int i=0;i<value;i++){
if (i==0){
d.add(getTodyMinData());
}else {
d.add(getMinData());
}
}
return d;
}
/**
* 明天 后天 分2222
*/
private ArrayList<IPickerViewData> getTodyMinData(){
int min = currentMin();
int current=0;
if (min>35&&min<=45){
current =0;
}else if (min>45&&min<=55){
current=1;
} else if (min>55){
current=2;
}else if (min<=5){
current=2;
}else if (min>5&&min<=15){
current=3;
}else if (min>15&&min<=25){
current=4;
}else if (min>25&&min<=35){
current=5;
}
int max =currentHour();
if (max>23&& min>35){
current=5;
}
ArrayList<IPickerViewData> dataArrayList=new ArrayList<>();
for (int i=current;i<6;i++){
dataArrayList.add(new PickerViewData((i*10)+"分"));
}
return dataArrayList;
}
private int currentMin(){
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.MINUTE);
}
private int currentHour(){
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.HOUR_OF_DAY);
}
}
到此這篇關(guān)于Android 滾動(dòng)時(shí)間選擇的示例代碼的文章就介紹到這了,更多相關(guān)Android 滾動(dòng)時(shí)間選擇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android中控件GridView實(shí)現(xiàn)設(shè)置行列分割線的方法示例
這篇文章主要介紹了利用Android中控件GridView實(shí)現(xiàn)設(shè)置行列分割線的方法,文中給出了詳細(xì)的介紹與示例代碼,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。2017-01-01
Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上
這篇文章主要為大家詳細(xì)介紹了Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Android中Activity生命周期和啟動(dòng)模式詳解
這篇文章主要介紹了Activity生命周期和啟動(dòng)模式詳解的相關(guān)資料,需要的朋友可以參考下2016-07-07
Android實(shí)現(xiàn)動(dòng)態(tài)高斯模糊效果示例代碼
這篇文章主要介紹了Android快速實(shí)現(xiàn)動(dòng)態(tài)模糊效果示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
android中ListView多次刷新重復(fù)執(zhí)行g(shù)etView的解決方法
以前倒是沒有注意listview的getView會(huì)重復(fù)執(zhí)行多次,在測(cè)試的時(shí)候去斷點(diǎn)跟蹤,發(fā)現(xiàn)同一條數(shù)據(jù)不斷的重復(fù)執(zhí)行,下面與大家分享下正確的解決方法,希望對(duì)你有所幫助2013-06-06

