package com.guomiao.calendar.activity;
import java.util.Calendar;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;
public class CalendarActivity extends Activity implements OnClickListener,Constant {
private static final int[] monthIds = { R.id.tv_month_1_1,
R.id.tv_month_1_2, R.id.tv_month_1_3, R.id.tv_month_1_4,
R.id.tv_month_1_5, R.id.tv_month_1_6, R.id.tv_month_1_7,
R.id.tv_month_2_1, R.id.tv_month_2_2, R.id.tv_month_2_3,
R.id.tv_month_2_4, R.id.tv_month_2_5, R.id.tv_month_2_6,
R.id.tv_month_2_7, R.id.tv_month_3_1, R.id.tv_month_3_2,
R.id.tv_month_3_3, R.id.tv_month_3_4, R.id.tv_month_3_5,
R.id.tv_month_3_6, R.id.tv_month_3_7, R.id.tv_month_4_1,
R.id.tv_month_4_2, R.id.tv_month_4_3, R.id.tv_month_4_4,
R.id.tv_month_4_5, R.id.tv_month_4_6, R.id.tv_month_4_7,
R.id.tv_month_5_1, R.id.tv_month_5_2, R.id.tv_month_5_3,
R.id.tv_month_5_4, R.id.tv_month_5_5, R.id.tv_month_5_6,
R.id.tv_month_5_7, R.id.tv_month_6_1, R.id.tv_month_6_2,
R.id.tv_month_6_3, R.id.tv_month_6_4, R.id.tv_month_6_5,
R.id.tv_month_6_6, R.id.tv_month_6_7, };
private static final int[] weekIds = { R.id.tv_week1, R.id.tv_week2,
R.id.tv_week3, R.id.tv_week4, R.id.tv_week5, R.id.tv_week6,
R.id.tv_week7 };
private ChineseCalendarGB chineseCalendarGB = new ChineseCalendarGB();
private TextView calendarTv,yearTv,messageTv;
private Button upBtn, nextBtn;
private int paYear, paMonth, paWeek, paDay, beginWeek, endDay;
private Calendar calendar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
calendarTv = (TextView) findViewById(R.id.tv_calendar);
messageTv = (TextView) findViewById(R.id.tv_message);
yearTv = (TextView) findViewById(R.id.tv_year);
upBtn = (Button) findViewById(R.id.btn_up);
nextBtn = (Button) findViewById(R.id.btn_next);
calendarTv.setOnClickListener(this);
yearTv.setOnClickListener(this);
upBtn.setOnClickListener(this);
nextBtn.setOnClickListener(this);
setWeek();
calendar = Calendar.getInstance();
setValues(calendar);
}
public void onClick(View view) {
int id = view.getId();
if (id == R.id.tv_year) {
calendar = Calendar.getInstance();
new DatePickerDialog(this, new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
paYear = year;
paMonth = monthOfYear== 12 ? 1 : monthOfYear + 1;
paDay = dayOfMonth;
calendar.set(paYear, paMonth - 1, 1);
cancel();
setValues(calendar);
}
},calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)).show();
} else if (id == R.id.btn_up) {
paMonth--;
if (paMonth == 0) {
paYear -= 1;
paMonth = 12;
}
calendar.set(paYear, paMonth - 1, 1);
cancel();
setValues(calendar);
} else if (id == R.id.btn_next) {
paMonth++;
if (paMonth == 13) {
paYear += 1;
paMonth = 1;
}
calendar.set(paYear, paMonth - 1, 1);
cancel();
setValues(calendar);
} else if (id == R.id.tv_calendar) {
Toast.makeText(this, "回到今天", Toast.LENGTH_LONG).show();
calendar = Calendar.getInstance();
cancel();
setValues(calendar);
}
for (int i = 0; i < monthIds.length; i++) {
if (id == monthIds[i]) {
TextView selectTv = (TextView) findViewById(id);
String solar = Pattern.compile("\\n").split(selectTv.getText() + "")[0];
int selectDay = 0;
try {
selectDay = Integer.valueOf(solar);
} catch (Exception e) {
for (int j = 0; j < solarTerms.length; j++) {
if (solarTerms[j].equals(solar)) {
selectDay = solarTermsDays[j][1];
}
}
for (int j = 0; j < festivals.length; j++) {
if (festivals[j].equals(solar)) {
selectDay = festivalsDays[j][1];
}
}
}
calendar.set(paYear, paMonth - 1, selectDay);
chineseCalendarGB.setCalendar(calendar);
String text = "农历 : " + chineseCalendarGB.toString();
messageTv.setText(text);
}
}
}
private void setValues(Calendar calendar) {
chineseCalendarGB.setCalendar(calendar);
String text = "农历 : " + chineseCalendarGB.toString();
messageTv.setText(text);
paYear = calendar.get(Calendar.YEAR);
paMonth = calendar.get(Calendar.MONTH) == 12 ? 1 : calendar.get(Calendar.MONTH) + 1;
paDay = calendar.get(Calendar.DAY_OF_MONTH);
paWeek = calendar.get(Calendar.DAY_OF_WEEK) == 1 ? 7 : calendar.get(Calendar.DAY_OF_WEEK) - 1;
switch (paMonth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
endDay = 31;
break;
case 4:
case 6:
case 9:
case 11:
endDay = 30;
break;
case 2:
if (paYear % 4 == 0) {
if (paYear % 100 == 0) {
if (paYear % 400 == 0) {
endDay = 29;
} else {
endDay = 28;
}
} else {
endDay = 29;
}
} else {
endDay = 28;
}
break;
}
beginWeek = paWeek - (paDay % 7 - 1);
yearTv.setText(paYear + "年" + paMonth + "月");
int j = 1;
Calendar calendarTemp = Calendar.getInstance();
for (int i = 0; i < monthIds.length; i++) {
TextView temp = (TextView) findViewById(monthIds[i]);
temp.setTextSize(15f);
temp.setBackgroundColor(0xffE7DED5);
temp.setTextColor(Color.RED);
if (i >= beginWeek - 1 && j <= endDay) {
calendar.set(paYear, paMonth - 1, j);
chineseCalendarGB.setCalendar(calendar);
String festival = calendarFestival(calendar);
String chineseCalendar = lunarHoliday(calendar);
boolean festivalFlag = !festival.equals("");
boolean chineseCalendarFlag = !chineseCalendar.equals("");
if (festivalFlag && chineseCalendarFlag) {
if (festival.equals(chineseCalendar)) {
festival = j + "";
}
temp.setBackgroundColor(Color.RED);
} else if (!festivalFlag && chineseCalendarFlag ) {
festival = j + "";
temp.setBackgroundColor(Color.CYAN);
} else if (festivalFlag && !chineseCalendarFlag) {
chineseCalendar = chineseCalendarGB.getDay();
temp.setBackgroundColor(Color.GRAY);
} else {
festival = j + "";
chineseCalendar = chineseCalendarGB.getDay();
}
temp.setText(festival + "\n" + chineseCalendar);
int year = calendarTemp.get(Calendar.YEAR);
int month = calendarTemp.get(Calendar.MONTH) == 12 ? 1 : calendarTemp.get(Calendar.MONTH) + 1;
int day = calendarTemp.get(Calendar.DAY_OF_MONTH);
if (paYear == year && paMonth == month && j == day)
temp.setBackgroundColor(Color.BLUE);
j++;
temp.setOnClickListener(this);
} else {
temp.setBackgroundColor(Color.WHITE);
}
}
}
private void cancel() {
for (int i = 0; i < monthIds.length; i++) {
TextView temp = (TextView) findViewById(monthIds[i]);
temp.setText(" " + "\n" + " ");
temp.setBackgroundColor(Color.WHITE);
}
}
private void setWeek() {
for (int i = 0; i < weekIds.length; i++) {
TextView temp = (TextView) findViewById(weekIds[i]);
temp.setTextSize(20f);
temp.setBackgroundColor(0xffE7DED5);
temp.setTextColor(Color.BLACK);
switch (weekIds[i]) {
case R.id.tv_week1:temp.setText("周一");break;
case R.id.tv_week2:temp.setText("周二");break;
case R.id.tv_week3:temp.setText("周三");break;
case R.id.tv_week4:temp.setText("周四");break;
case R.id.tv_week5:temp.setText("周五");break;
case R.id.tv_week6:temp.setText("周六");break;
case R.id.tv_week7:temp.setText("周日");break;
}
}
}
/**
* 阳历节日
* @param calendar
* @return
*/
private String calendarFestival(Calendar calendar){
String festival = "";
int paMonth = calendar.get(Calendar.MONTH) == 12 ? 1 : calendar.get(Calendar.MONTH) + 1;
int paDay =
- 1
- 2
- 3
- 4
- 5
- 6
前往页