package com.yyquan.jzh.view.DataPickerView; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import android.app.Activity; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.PopupWindow; import com.yyquan.jzh.R; /** * 时间选择器 * * @author Sai * */ public class TimePopupWindow extends PopupWindow implements OnClickListener { public enum Type { ALL, YEAR_MONTH_DAY, HOURS_MINS, MONTH_DAY_HOUR_MIN }// 四种选择模式,年月日时分,年月日,时分,月日时分 private View rootView; // 总的布局 WheelTime wheelTime; private View btnSubmit, btnCancel; private static final String TAG_SUBMIT = "submit"; private static final String TAG_CANCEL = "cancel"; private OnTimeSelectListener timeSelectListener; public TimePopupWindow(Context context, Type type) { super(context); this.setWidth(LayoutParams.FILL_PARENT); this.setHeight(LayoutParams.WRAP_CONTENT); this.setBackgroundDrawable(new BitmapDrawable());// 这样设置才能点击屏幕外dismiss窗口 this.setOutsideTouchable(true); this.setAnimationStyle(R.style.timepopwindow_anim_style); LayoutInflater mLayoutInflater = LayoutInflater.from(context); rootView = mLayoutInflater.inflate(R.layout.pw_time, null); // -----确定和取消按钮 btnSubmit = rootView.findViewById(R.id.btnSubmit); btnSubmit.setTag(TAG_SUBMIT); btnCancel = rootView.findViewById(R.id.btnCancel); btnCancel.setTag(TAG_CANCEL); btnSubmit.setOnClickListener(this); btnCancel.setOnClickListener(this); // ----时间转轮 final View timepickerview = rootView.findViewById(R.id.timepicker); ScreenInfo screenInfo = new ScreenInfo((Activity) context); wheelTime = new WheelTime(timepickerview, type); wheelTime.screenheight = screenInfo.getHeight(); //默认选中当前时间 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); wheelTime.setPicker(year, month, day, hours, minute); setContentView(rootView); } /** * 设置可以选择的时间范围 * * @param START_YEAR * @param END_YEAR */ public void setRange(int START_YEAR, int END_YEAR) { WheelTime.setSTART_YEAR(START_YEAR); WheelTime.setEND_YEAR(END_YEAR); } /** * 设置选中时间 * @param date */ public void setTime(Date date) { Calendar calendar = Calendar.getInstance(); if (date == null) calendar.setTimeInMillis(System.currentTimeMillis()); else calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); wheelTime.setPicker(year, month, day, hours, minute); } /** * 指定选中的时间,显示选择器 * * @param parent * @param gravity * @param x * @param y * @param date */ public void showAtLocation(View parent, int gravity, int x, int y, Date date) { Calendar calendar = Calendar.getInstance(); if (date == null) calendar.setTimeInMillis(System.currentTimeMillis()); else calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); wheelTime.setPicker(year, month, day, hours, minute); update(); super.showAtLocation(parent, gravity, x, y); } /** * 设置是否循环滚动 * * @param cyclic */ public void setCyclic(boolean cyclic) { wheelTime.setCyclic(cyclic); } @Override public void onClick(View v) { String tag = (String) v.getTag(); if (tag.equals(TAG_CANCEL)) { dismiss(); return; } else { if (timeSelectListener != null) { try { Date date = WheelTime.dateFormat.parse(wheelTime.getTime()); timeSelectListener.onTimeSelect(date); } catch (ParseException e) { e.printStackTrace(); } } dismiss(); return; } } public interface OnTimeSelectListener { public void onTimeSelect(Date date); } public void setOnTimeSelectListener(OnTimeSelectListener timeSelectListener) { this.timeSelectListener = timeSelectListener; } }