package com.pwp.activity; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.Display; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.WindowManager; import android.view.animation.AnimationUtils; import android.widget.AbsListView.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.DatePicker; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ViewFlipper; import com.pwp.borderText.BorderText; import com.pwp.dao.ScheduleDAO; /** * * @author lilin * @date 2013-2-5 下午5:12:40 * @annotation 主界面 */ public class MyCalendarView extends Activity implements OnGestureListener, OnClickListener { private ViewFlipper mViewFlipper = null; private GestureDetector gestureDetector = null; private MyCalendarAdp mAdp = null; private GridView mGridView = null; private BorderText topTextView = null; private static int jumpMonth = 0; // 每次滑动,增加或减去一个月,默认为0(即显示当前月) private static int jumpYear = 0; // 滑动跨越一年,则增加或者减去一年,默认为0(即当前年) private int year_c = 0; private int month_c = 0; private int day_c = 0; private String curDateStr = ""; private ScheduleDAO dao = null; Button backTodayButton; Button selectDataButton; @SuppressLint("SimpleDateFormat") public MyCalendarView() { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); curDateStr = sdf.format(date); // 当期日期 year_c = Integer.parseInt(curDateStr.split("-")[0]); month_c = Integer.parseInt(curDateStr.split("-")[1]); day_c = Integer.parseInt(curDateStr.split("-")[2]); dao = new ScheduleDAO(this); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mycalendarview); backTodayButton = (Button) findViewById(R.id.backtodaybutton); selectDataButton = (Button) findViewById(R.id.selectdatabutton); backTodayButton.setOnClickListener((OnClickListener) this); selectDataButton.setOnClickListener((OnClickListener) this); gestureDetector = new GestureDetector(this); mViewFlipper = (ViewFlipper) findViewById(R.id.flipper); mViewFlipper.removeAllViews(); mAdp = new MyCalendarAdp(this, getResources(), jumpMonth, jumpYear, year_c, month_c, day_c); addGridView(); mGridView.setAdapter(mAdp); mViewFlipper.addView(mGridView, 0); topTextView = (BorderText) findViewById(R.id.toptext); addTopTextView(topTextView); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { int gvFlag = 0; // 每次添加gridview到viewflipper中时给的标记 // 左滑动 if (e1.getX() - e2.getX() > 120) { addGridView(); // 添加一个gridView jumpMonth++; // 下一个月 mAdp = new MyCalendarAdp(this, getResources(), jumpMonth, jumpYear, year_c, month_c, day_c); mGridView.setAdapter(mAdp); addTopTextView(topTextView); gvFlag++; mViewFlipper.addView(mGridView, gvFlag); mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out)); mViewFlipper.showNext(); mViewFlipper.removeViewAt(0); return true; } // 右滑动 else if (e1.getX() - e2.getX() < -120) { addGridView(); // 添加一个gridView jumpMonth--; // 上一个月 mAdp = new MyCalendarAdp(this, getResources(), jumpMonth, jumpYear, year_c, month_c, day_c); mGridView.setAdapter(mAdp); gvFlag++; addTopTextView(topTextView); mViewFlipper.addView(mGridView, gvFlag); mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in)); mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out)); mViewFlipper.showPrevious(); mViewFlipper.removeViewAt(0); return true; } return false; } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, Menu.FIRST, Menu.FIRST, "今天"); menu.add(0, Menu.FIRST + 1, Menu.FIRST + 1, "跳转"); menu.add(0, Menu.FIRST + 2, Menu.FIRST + 2, "日程"); menu.add(0, Menu.FIRST + 3, Menu.FIRST + 3, "日期转换"); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case Menu.FIRST: gotoToday(); break; case Menu.FIRST + 1: selectDate(); break; case Menu.FIRST + 2: Intent intent = new Intent(); intent.setClass(MyCalendarView.this, ScheduleAllView.class); startActivity(intent); break; case Menu.FIRST + 3: Intent intent1 = new Intent(); intent1.setClass(MyCalendarView.this, MyCalendarConvertView.class); intent1.putExtra("date", new int[] { year_c, month_c, day_c }); startActivity(intent1); break; } return super.onMenuItemSelected(featureId, item); } // private void selectDate() { new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 1901-1-1 ----> 2049-12-31 if (year < 1901 || year > 2049) { // 不在查询范围内 new AlertDialog.Builder(MyCalendarView.this) .setTitle("错误日期") .setMessage("跳转日期范围(1901/1/1-2049/12/31)") .setPositiveButton("确认", null).show(); } else { int gvFlag = 0; addGridView(); // 添加一个gridView mAdp = new MyCalendarAdp(MyCalendarView.this, getResources(), year, monthOfYear + 1, dayOfMonth); mGridView.setAdapter(mAdp); addTopTextView(topTextView); gvFlag++; mViewFlipper.addView(mGridView, gvFlag); if (year == year_c && monthOfYear + 1 == month_c) { // nothing to do } if ((year == year_c && monthOfYear + 1 > month_c) || year > year_c) { mViewFlipper.setInAnimation(AnimationUtils .loadAnimation(MyCalendarView.this, R.anim.push_left_in)); mViewFlipper.setOutAnimation(AnimationUtils .loadAnimation(MyCalendarView.this, R.anim.push_left_out)); mViewFlipper.showNext(); } else { mViewFlipper.setInAnimation(AnimationUtils .loadAnimation(MyCalendarView.this, R.anim.push_right_in)); mViewFlipper.setOutAnimation(AnimationUtils .loadAnimation(MyCalendarView.this, R.anim.push_right_out)); mViewFlipper.showPrevious(); } mViewFlipper.removeViewAt(0); // 跳转之后将跳转之后的日期设置为当期日期 year_c = year; month_c = monthOfYear + 1; day_c = dayOfMonth; jumpMonth = 0; jumpYear = 0; } } }, year_c, month_c - 1, day_c).show(); } // 跳转到今天 private void gotoToday() { int xMonth = jumpMonth; int xYear = jumpYear; int gvFlag = 0; jumpMonth = 0; jumpYear = 0; addGridView(); // 添加一个gridView year_c = Integer.parseInt(curDateStr.split("-")[0]); month_c = Integer.parseInt(curDateStr.split("-")[1]); day_c = Integer.parseInt(curDateStr.split("-")[2]); mAdp = new MyCalendarAdp(this, getResources(), jumpMonth, jumpYear, year_c, month_c, day_c); mGridView.setAdapter(mAdp); addTopTextView(topTextView); gvFlag++; mViewFlipper.addView(mGridView, gvFlag); if (xMonth == 0 && xYear == 0) { // nothing to do } else if ((xYear == 0 && xMonth > 0) || xYear > 0) { mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out)); mViewFlipper.showNext(); } else { mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in)); mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out)); mViewFlipper.showPrevious(); } mViewFlipper.removeViewAt(0); } @Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { return false; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } // 添加头部的年份 闰哪月等信息 public void addTopTextView(TextView textView) { StringBuffer textDate = new StringBuffer(); Drawable bg = getResources().getDrawable(R.drawable.top_day); textView.setBackgroundDrawable(bg); // 2013年2月 蛇年(癸巳年) // 2012年2月 闰四月龙年(壬辰年) // 2013年2月 textDate.append(mAdp.getShowYear()).append("年") .append(mAdp.getShowMonth()).append("月").append("\t"); // 显示闰月 if (!mAdp.getLeapMonth().equals("") && mAdp.getLeapMonth() != null) { textDate.append("闰").append(mAdp.getLeapMonth()).append("月") .append("\t"); } // 蛇年(癸巳年) textDate.append(mAdp.getAnimalsYear()).append("年").append("(") .append(mAdp.getCyclical()).append("年)"); textView.setText(textDate); textView.setTextSize(18); textView.setTextColor(Color.BLACK); textView.setTypeface(Typeface.DEFAULT_BOLD); } // 添加gridview private void addGridView() { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); // 取得屏幕的宽度和高度 WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); int Width = display.getWidth(); int Height = display.getHeight(); mGridView = new GridView(this); mGridView.setNumColumns(7);// 7列 mGridView.setColumnWidth(46);// 每项的宽度 if (Width == 480 && Height == 800) { mGridView.setColumnWidth(69); } mGridView.setGravity(Gravity.CENTER_VERTICAL); isShowGridViewBorder(mGridView, false);// 是否显示网格边框 mGridView.setBackgroundResource(R.drawable.mycalendar_gridview_bg); mGridView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) {// 将gridview中的触摸事件回传给gestureDetector return gestureDetector.onTouchEvent(event); } }); mGridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // Toast.makeText(MyCalendarView.this, position % 7 + "", // Toast.LENGTH_SHORT).show(); int startPosition = mAdp.getStartPositon();// 当月第一天的位置 int endPosition = mAdp.getEndPosition();// 当月最后一天的位置 Log.i("andli", "点击位置=" + position); Log.i("andli", "当月第一天,最后一天的位置[" + startPosition + "," + endPosition + "]"); // 本月范围内方可添加日程 if (startPosition <= position && position <= endPosition) { String scheduleDay = mAdp.getDateByClickItem(position) .split("\\.")[0]; // 这一天的阳历 // String scheduleLunarDay = // mAdp.getDateByClickItem(position).split("\\.")[1]; // //这一天的阴历 String scheduleYear = mAdp.getShowYear(); String scheduleMonth = mAdp.getShowMonth(); // 通过日期查询这一天是否被标记,如果标记了日程就查询出这天的所有日程信息 String[] scheduleIDs = dao.getScheduleByTagDate( Integer.parseInt(scheduleYear), Integer.parseInt(scheduleMonth), Integer.parseInt(scheduleDay)); if (scheduleIDs != null && scheduleIDs.length > 0) { // 跳转到显示这一天的所有日程信息界面 Intent intent = new Intent(); intent.setClass(MyCalendarView.this, ScheduleInfoView.class); intent.putExtra("scheduleID", scheduleIDs); startActivity(intent); } // 直接跳转到需要添加日程的界面 else { ArrayList<String> scheduleDate = new ArrayList<String>(); scheduleDate.add(scheduleYear); scheduleDate.add(scheduleMonth); scheduleDate.add(scheduleDay); scheduleDate.add(getWeek(position)); Intent intent = new Intent(); intent.putStringArrayListExtra("scheduleDate", scheduleDate); intent.setClass(MyCalendarView.this, ScheduleAddView.class); startActivity(intent); } } // else { // Toast.makeText(MyCalendarView.this, "非当月,无法新增日程", // Toast.LENGTH_SHORT).show(); // } } }); mGridView.setLayoutParams(params); } // 是否显示GridView的边框 private void isShowGridViewBorder(GridView mGridView2, boolean b) { if (b) { mGridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); // 去除gridView边框 mGridView.setVerticalSpacing(1); mGridView.setHorizontalSpacing(1); } } private String getWeek(int position) { String week = ""; // 得到这一天是星期几 switch (position % 7) { case 0: week = "星期日"; break; case 1: week = "星期一"; break; case 2: week = "星期二"; break; case 3: week = "星期三"; break; case 4: week = "星期四"; break; case 5: week = "星期五"; break; case 6: week = "星期六"; break; } return week; } @Override public void onClick(View v) { if (v == backTodayButton) { gotoToday(); } else if (v == selectDataButton) { selectDate(); } } }