package com.partynetwork.iparty.iparty;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import com.partynetwork.dataprovider.util.DisplayUtil;
import com.partynetwork.dataprovider.util.StringUtil;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.dom.OnTimeTypeListener;
import com.partynetwork.iparty.info.TimeInfo;
import com.partynetwork.myui.CommonView;
import com.partynetwork.myview.wheelview.NumericWheelAdapter;
import com.partynetwork.myview.wheelview.OnWheelChangedListener;
import com.partynetwork.myview.wheelview.WheelPicker;
import com.partynetwork.myview.wheelview.WheelView;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
/**
* 具体时间操作页面
*
* @author 沈跃双 Create at 2013-12-25 下午8:29:11
*/
public class IpartyPublishTimeSite extends CommonView implements
OnClickListener {
/**
* 年份范围结束
*/
private static final int END_YEAR = 2100;
/**
* 每一项控件的高度
*/
private int itemHeight;
/**
* 时间的填充区域
*/
private LinearLayout body;
/**
* 显示当前选中时间的文本
*/
private TextView dateTv;
/**
* 类别文本
*/
private TextView typeTv;
/**
* 日期选取控件
*/
private PopupWindow datePopupWindow;
private WheelView wvYear;
private WheelView wvMonth;
private WheelView wvDay;
/**
* 时间的频率
*/
private int[] week;
private List<TextView> dateTvList = new ArrayList<TextView>();
private OnTimeTypeListener listener;
/**
* 时间的类别
*/
private int timeType;
/**
*
* 构造函数
*
* @param mActivity
* @param listener
*/
public IpartyPublishTimeSite(Activity mActivity, OnTimeTypeListener listener) {
this.mActivity = mActivity;
this.listener = listener;
mView = LayoutInflater.from(mActivity).inflate(
R.layout.iparty_publish_time_site, null);
init();
}
/**
* 初始化数据、控件
*/
private void init() {
initView();
itemHeight = DisplayUtil.dip2px(this.mActivity, 60);
initTime(1);
}
/**
* 初始化方法
*/
private void initView() {
/**
* 时间的填充区域
*/
body = (LinearLayout) mView.findViewById(R.id.time_body_ll);
/**
* 显示当前选中时间的文本
*/
dateTv = (TextView) mView.findViewById(R.id.time_date_tv);
/**
* 类别文本
*/
typeTv = (TextView) mView.findViewById(R.id.iparty_publish_type_tv);
mView.findViewById(R.id.iparty_publish_type).setOnClickListener(this);
}
/**
*
* @param position
*/
public void initTime(int position) {
clearBody();
switch (position) {
case 1:
timeType = 0;
typeTv.setText("当天结束");
addDateView("日期", 0);
addDateView("开始时间", 1);
addDateView("结束时间", 1);
break;
case 2:
timeType = 1;
typeTv.setText("连续多天");
addDateView("开始日期", 0);
addDateView("结束日期", 0);
addDateView("开始时间", 1);
addDateView("结束时间", 1);
break;
case 3:
timeType = 2;
typeTv.setText("每周举行");
addDateView("频率", 2);
addDateView("开始日期", 0);
addDateView("结束日期", 0);
addDateView("开始时间", 1);
addDateView("结束时间", 1);
break;
default:
break;
}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.iparty_publish_type:
listener.change(4);
break;
default:
break;
}
}
/**
* 清空时间显示范围的内容布局
*/
private void clearBody() {
body.removeAllViews();
dateTvList.removeAll(dateTvList);
dateTv.setText("");
}
/**
* 打印日期
*/
private void printDate() {
String str = "";
for (TextView tv : dateTvList) {
str += tv.getText().toString() + " ";
}
dateTv.setText(str);
}
/**
* 获取当前选择的时间文本
*
* @return
*/
public TimeInfo[] getDate() {
TimeInfo[] timeInfo = null;
if (timeType == 0) {
timeInfo = new TimeInfo[1];
timeInfo[0] = new TimeInfo();
timeInfo[0].setStartTime(StringUtil.getTime(dateTvList.get(0)
.getText().toString()
+ dateTvList.get(1).getText().toString()));
timeInfo[0].setEndTime(StringUtil.getTime(dateTvList.get(0)
.getText().toString()
+ dateTvList.get(2).getText().toString()));
} else if (timeType == 1) {
timeInfo = new TimeInfo[1];
timeInfo[0] = new TimeInfo();
timeInfo[0].setStartTime(StringUtil.getTime(dateTvList.get(0)
.getText().toString()
+ dateTvList.get(2).getText().toString()));
timeInfo[0].setEndTime(StringUtil.getTime(dateTvList.get(1)
.getText().toString()
+ dateTvList.get(3).getText().toString()));
} else if (timeType == 2) {
timeInfo = new TimeInfo[1];
timeInfo[0] = new TimeInfo();
timeInfo[0].setStartTime(StringUtil.getTime(dateTvList.get(1)
.getText().toString()
+ dateTvList.get(3).getText().toString()));
timeInfo[0].setEndTime(StringUtil.getTime(dateTvList.get(2)
.getText().toString()
+ dateTvList.get(4).getText().toString()));
timeInfo[0].setWeek(week);
}
return timeInfo;
}
/**
* 添加日期布局
*
* @param title
* 左侧显示的标题
* @param type
* 0:选择日期;1:选择时间 ;2:选择星期
*/
private void addDateView(String title, final int type) {
RelativeLayout layout = new RelativeLayout(this.mActivity);
LayoutParams param = new LayoutParams(LayoutParams.FILL_PARENT,
itemHeight);
layout.setLayoutParams(param);
layout.setBackgroundColor(Color.WHITE);
TextView tv = new TextView(this.mActivity);
RelativeLayout.LayoutParams paramTv = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.FILL_PARENT);
paramTv.setMargins(DisplayUtil.dip2px(this.mActivity, 20), 0, 0, 0);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setText(title);
tv.setTextColor(Color.parseColor("#5A5858"));
tv.setTextSize(15);
layout.addView(tv, paramTv);
TextView tv2 = new TextView(this.mActivity);
RelativeLayout.LayoutParams paramTv2 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.FILL_PARENT);
paramTv2.setMargins(0, 0, DisplayUtil.dip2px(this.mActivity, 20), 0);
paramTv2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
tv2.setGravity(Gravity.CENTER_VERTICAL);
tv2.setTextColor(Color.parseColor("#5A5858"));
tv2.setTextSize(15);
layout.addView(tv2, paramTv2);
// 用于区分操作区域的tag
layout.setTag(dateTvList.size());
// 放进显示列表用于之后选择显示
dateTvList.add(tv2);
// 设置监听
layout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (type == 2) {
listener.change(5);
} else {
showPopDate(type, Integer.parseInt(v.getTag().toString()));
}
}
});
addLine();
body.addView(layout);
}
/**
* 添加分割线
*/
private void addLine() {
LinearLayout layout = new LinearLayout(this.mActivity);
LayoutParams param = new LayoutParams(LayoutParams.FILL_PARENT, 1);
layout.setLayoutParams(param);
layout.setBackgroundColor(this.mActivity.getResources().getColor(
R.color.lightgray));
body.addView(layout);
}
/**
* 显示弹出的时间选择控件
*
* @param type
* 0:选择日期;1:选择时间
*/
private void showPopDate(final int type, final int position) {
Calendar calendar = Calendar.getInstance();
final int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
View view = View
.inflate(this.mActivity, R.layout.wheelview_three, null);
// 弹出框的功能按钮
Button leftBtn = (Button) view.findViewById(R.id.left_btn);
Button rightBtn = (Button) view.findViewById(R.id.right_btn);
leftBtn.setVisibility(View.GONE);
// 事件监听
rightBtn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
String yearS = wvYear.getTextItem(wvYear.getCurrentItem());
String monthS = wvMonth.getTextItem(wvMonth.getCurrentItem());
String dayS = wvDay.getTextItem(wvDay.getCurrentItem());
if (type == 1) {
dateTvList.get(position)
.setText(yearS + "时" + monthS + "分");
} else {
dateTvList.get(position).setText(
yearS + "年" + monthS + "月" + dayS + "日");
}
if (datePopupWindow.isShowing()) {
datePopupWindow.dismiss();
}
printDate();
}
});
wvYear = (WheelView) view.findViewById(R.id.first_wheel);
wvMonth = (WheelView) view.findViewById(R.id.second_wheel);
wvDay = (WheelView) view.findViewById(R.id.third_wheel);
if (type == 1) {
wvYear.setAdapter(new NumericWheelAdapter(0, 23));
wvYear.setCyclic(true);// 可循环滚动
wvYear.setCurrentItem(hour - 0);// 初始化时显示的数据
wvMonth.setAdapter(new NumericWheelAdapter(0, 59));
wvMonth.setCyclic(true);// 可循环滚动
wvMonth.setCurrentItem(minute - 0);// 初始化时显示的数据
wvDay.setVisibility(View.GONE);
} else {
// 添加大小月月份并将其转换为list,方便之后的判断
String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
String[] months_little = { "4", "6", "9", "11" };
final List<String> list_big = Arrays.asList(months_big);
final List<String> list_little = Arrays.asList(months_little);
// 年
wvYear.setAdapter(new NumericWheelAdapter(year, END_YEAR));// 设置"年"的显示数据
wvYear.setCyclic(true);// 可循环滚动
wvYear.setLabel("年");// 添加文字
wvYear.setCurrentItem(0);// 初始化时显示的数据
// 月
wvMonth.setAdapter(new NumericWheelAdapter(1, 12));
wvMonth.setCyclic(true);
wvMonth.setLabel("月");
wvMonth.setCurrentItem(month);
// 日
wvDay.setCyclic(true);
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month + 1))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(month + 1))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 30));
} else {
// 闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
wvDay.setAdapter(new NumericWheelAdapter(1, 29));
else
wvDay.setAdapter(new NumericWheelAdapter(1, 28));
}
wvDay.setLabel("日");
wvDay.setCurrentItem(day - 1);
// 添加"年"监听
OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue,
int newValue) {
int year_num = newValue + year;
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(wvMonth
.getCurrentItem() + 1))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(wvMonth
.getCurrentItem() + 1))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 30));
} else {
if ((year_num % 4 == 0 && year_num % 100 != 0)
|| year_num % 400 == 0)
wvDay.setAdapter(new NumericWheelAdapter(1, 29));
else
wvDay.setAdapter(new NumericWheelAdapter(1, 28));
}
}
};
// 添加"月"监听
OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() {
public void onChanged(WheelView wheel, int oldValue,
int newValue) {
int month_num = newValue + 1;
// 判断大小月及是否闰年,用来确定"日"的数据
if (list_big.contains(String.valueOf(month_num))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 31));
} else if (list_little.contains(String.valueOf(month_num))) {
wvDay.setAdapter(new NumericWheelAdapter(1, 30));
} else {
if (((wvYear.getCurrentItem() + year) % 4 == 0 && (wvYear
.getCurrentItem() + year) % 100 != 0)
|| (wvYear.getCurrentItem() + year) % 400 == 0)
wvDay.setAdapter(new NumericWheelAdapter(1, 29));
else
wvDay.setAdapter(new NumericWheelAdapter(1, 28));
}
}
};
wvYear.addChangingListener(wheelListener_year);
wvMonth.addChangingListener(wheelListener_month);
}
view.startAnimation(AnimationUtils.loadAnimation(this.mActivity,
R.anim.push_bottom_in));
if (datePopupWindow == null) {
datePopupWindow = new PopupWindow(this.mActivity);
datePopupWindow.setWidth(LayoutParams.WRAP_CONTENT);
datePopupWindow.setHeight(LayoutParams.WRAP_CONTENT);
datePopupWindow.setBackgroundDrawable(new BitmapDrawable());
datePopupWindow.setFocusable(true);
datePopupWindow.setOutsideTouchable(true);
}
datePopupWindow.setContentView(view);
datePopupWindow.showAtLocation(body, Gravity.BOTTOM, 0, 0);
datePopupWindow.update();
}
/**
* 把list的星期显示到文本上去
*
* @param list
*/
public void setRate(List<Integer> list) {
String str = "";
week = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
week[i] = list.get(i);
str += " " + (list.get(i) + 1);
}
dateTvList.get(0).setText("每周" + str);
}
}