android 好看的自定义日历
来源:互联网 发布:浏览器看淘宝卡 编辑:程序博客网 时间:2024/04/29 20:58
根据网上查找的资料,可在项目中直接使用的自定义日历控件,综合选择了如下好看的日历:
接下来我们看下代码是如何实现?
首先看布局文件是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffffff" tools:context=".MainActivity" > <LinearLayout android:id="@+id/ll_popup" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffeeeeee" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginBottom="10dp" android:layout_marginTop="10dp" > <RelativeLayout android:id="@+id/popupwindow_calendar_last_month" android:layout_width="70dp" android:layout_height="55dp" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/popupwindow_calendar_month" > <TextView android:layout_width="9dp" android:layout_height="14dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:background="@drawable/bt_calendar_last" /> </RelativeLayout> <TextView android:id="@+id/popupwindow_calendar_month" android:layout_width="110dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:textColor="#aa564b4b" android:textSize="18sp" /> <RelativeLayout android:id="@+id/popupwindow_calendar_next_month" android:layout_width="70dp" android:layout_height="55dp" android:layout_centerVertical="true" android:layout_toRightOf="@+id/popupwindow_calendar_month" > <TextView android:layout_width="9dp" android:layout_height="14dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:background="@drawable/bt_calendar_next" /> </RelativeLayout> </RelativeLayout> <com.fancyy.calendarweight.KCalendar android:id="@+id/popupwindow_calendar" android:layout_width="match_parent" android:layout_height="300dp" > </com.fancyy.calendarweight.KCalendar> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#bbcc3333" /> </LinearLayout></RelativeLayout>
上面的com.fancyy.calendarweight.KCalendar也就是我们自定义日历的核心了
我们也来看看:
package com.fancyy.calendarweight;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import android.content.Context;import android.content.res.Resources;import android.graphics.Color;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.ViewFlipper;@SuppressWarnings("deprecation")public class KCalendar extends ViewFlipper implementsandroid.view.GestureDetector.OnGestureListener {public static final int COLOR_BG_WEEK_TITLE = Color.parseColor("#ffeeeeee"); // 星期标题背景颜色public static final int COLOR_TX_WEEK_TITLE = Color.parseColor("#ffcc3333"); // 星期标题文字颜色public static final int COLOR_TX_THIS_MONTH_DAY = Color.parseColor("#aa564b4b"); // 当前月日历数字颜色public static final int COLOR_TX_OTHER_MONTH_DAY = Color.parseColor("#ffcccccc"); // 其他月日历数字颜色public static final int COLOR_TX_THIS_DAY = Color.parseColor("#ff008000"); // 当天日历数字颜色public static final int COLOR_BG_THIS_DAY = Color.parseColor("#ffcccccc"); // 当天日历背景颜色public static final int COLOR_BG_CALENDAR = Color.parseColor("#ffeeeeee"); // 日历背景色private GestureDetector gd; // 手势监听器private Animation push_left_in; // 动画-左进private Animation push_left_out; // 动画-左出private Animation push_right_in; // 动画-右进private Animation push_right_out; // 动画-右出private int ROWS_TOTAL = 6; // 日历的行数private int COLS_TOTAL = 7; // 日历的列数private String[][] dates = new String[6][7]; // 当前日历日期private float tb;private OnCalendarClickListener onCalendarClickListener; // 日历翻页回调private OnCalendarDateChangedListener onCalendarDateChangedListener; // 日历点击回调private String[] weekday = new String[] { "日", "一", "二", "三", "四", "五", "六" }; // 星期标题private int calendarYear; // 日历年份private int calendarMonth; // 日历月份private Date thisday = new Date(); // 今天private Date calendarday; // 日历这个月第一天(1号)private LinearLayout firstCalendar; // 第一个日历private LinearLayout secondCalendar; // 第二个日历private LinearLayout currentCalendar; // 当前显示的日历private Map<String, Integer> marksMap = new HashMap<String, Integer>(); // 储存某个日子被标注(Integer// 为bitmap// res// id)private Map<String, Integer> dayBgColorMap = new HashMap<String, Integer>(); // 储存某个日子的背景色public KCalendar(Context context, AttributeSet attrs) {super(context, attrs);//初始化init();}public KCalendar(Context context) {super(context);//初始化init();}private void init() {setBackgroundColor(COLOR_BG_CALENDAR);// 实例化收拾监听器gd = new GestureDetector(this);// 初始化日历翻动动画push_left_in = AnimationUtils.loadAnimation(getContext(),R.anim.push_left_in);push_left_out = AnimationUtils.loadAnimation(getContext(),R.anim.push_left_out);push_right_in = AnimationUtils.loadAnimation(getContext(),R.anim.push_right_in);push_right_out = AnimationUtils.loadAnimation(getContext(),R.anim.push_right_out);push_left_in.setDuration(400);push_left_out.setDuration(400);push_right_in.setDuration(400);push_right_out.setDuration(400);// 初始化第一个日历firstCalendar = new LinearLayout(getContext());firstCalendar.setOrientation(LinearLayout.VERTICAL);firstCalendar.setLayoutParams(new LinearLayout.LayoutParams(-1, -1));// 初始化第二个日历secondCalendar = new LinearLayout(getContext());secondCalendar.setOrientation(LinearLayout.VERTICAL);secondCalendar.setLayoutParams(new LinearLayout.LayoutParams(-1, -1));// 设置默认日历为第一个日历currentCalendar = firstCalendar;// 加入ViewFlipperaddView(firstCalendar);addView(secondCalendar);// 绘制线条框架drawFrame(firstCalendar);drawFrame(secondCalendar);// 设置日历上的日子(1号)calendarYear = thisday.getYear() + 1900;calendarMonth = thisday.getMonth();calendarday = new Date(calendarYear - 1900, calendarMonth, 1);// 填充展示日历setCalendarDate();}private void drawFrame(LinearLayout oneCalendar) {// 添加周末线性布局LinearLayout title = new LinearLayout(getContext());title.setBackgroundColor(COLOR_BG_WEEK_TITLE);title.setOrientation(LinearLayout.HORIZONTAL);LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(-1, 0,0.5f);Resources res = getResources();tb = res.getDimension(R.dimen.historyscore_tb);layout.setMargins(0, 0, 0, (int) (tb * 1.2));title.setLayoutParams(layout);oneCalendar.addView(title);// 添加周末TextViewfor (int i = 0; i < COLS_TOTAL; i++) {TextView view = new TextView(getContext());view.setGravity(Gravity.CENTER);view.setText(weekday[i]);view.setTextColor(COLOR_TX_WEEK_TITLE);view.setLayoutParams(new LinearLayout.LayoutParams(0, -1, 1));title.addView(view);}// 添加日期布局LinearLayout content = new LinearLayout(getContext());content.setOrientation(LinearLayout.VERTICAL);content.setLayoutParams(new LinearLayout.LayoutParams(-1, 0, 7f));oneCalendar.addView(content);// 添加日期TextViewfor (int i = 0; i < ROWS_TOTAL; i++) {LinearLayout row = new LinearLayout(getContext());row.setOrientation(LinearLayout.HORIZONTAL);row.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1));content.addView(row);// 绘制日历上的列for (int j = 0; j < COLS_TOTAL; j++) {RelativeLayout col = new RelativeLayout(getContext());col.setLayoutParams(new LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT, 1));col.setBackgroundResource(R.drawable.calendar_day_bg);row.addView(col);// 给每一个日子加上监听col.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ViewGroup parent = (ViewGroup) v.getParent();int row = 0, col = 0;// 获取列坐标for (int i = 0; i < parent.getChildCount(); i++) {if (v.equals(parent.getChildAt(i))) {col = i;break;}}// 获取行坐标ViewGroup pparent = (ViewGroup) parent.getParent();for (int i = 0; i < pparent.getChildCount(); i++) {if (parent.equals(pparent.getChildAt(i))) {row = i;break;}}if (onCalendarClickListener != null) {onCalendarClickListener.onCalendarClick(row, col,dates[row][col]);}}});}}}/** * 填充日历(包含日期、标记、背景等) */private void setCalendarDate() {// 根据日历的日子获取这一天是星期几int weekday = calendarday.getDay();// 每个月第一天int firstDay = 1;// 每个月中间号,根据循环会自动++int day = firstDay;// 每个月的最后一天int lastDay = getDateNum(calendarday.getYear(), calendarday.getMonth());// 下个月第一天int nextMonthDay = 1;int lastMonthDay = 1;// 填充每一个空格for (int i = 0; i < ROWS_TOTAL; i++) {for (int j = 0; j < COLS_TOTAL; j++) {// 这个月第一天不是礼拜天,则需要绘制上个月的剩余几天if (i == 0 && j == 0 && weekday != 0) {int year = 0;int month = 0;int lastMonthDays = 0;// 如果这个月是1月,上一个月就是去年的12月if (calendarday.getMonth() == 0) {year = calendarday.getYear() - 1;month = Calendar.DECEMBER;} else {year = calendarday.getYear();month = calendarday.getMonth() - 1;}// 上个月的最后一天是几号lastMonthDays = getDateNum(year, month);// 第一个格子展示的是几号int firstShowDay = lastMonthDays - weekday + 1;// 上月for (int k = 0; k < weekday; k++) {lastMonthDay = firstShowDay + k;RelativeLayout group = getDateView(0, k);group.setGravity(Gravity.CENTER);TextView view = null;if (group.getChildCount() > 0) {view = (TextView) group.getChildAt(0);} else {LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -1);view = new TextView(getContext());view.setLayoutParams(params);view.setGravity(Gravity.CENTER);group.addView(view);}view.setText(Integer.toString(lastMonthDay));view.setTextColor(COLOR_TX_OTHER_MONTH_DAY);dates[0][k] = format(new Date(year, month, lastMonthDay));// 设置日期背景色if (dayBgColorMap.get(dates[0][k]) != null) {// view.setBackgroundResource(dayBgColorMap// .get(dates[i][j]));} else {view.setBackgroundColor(Color.TRANSPARENT);}// 设置标记setMarker(group, 0, k);}j = weekday - 1;// 这个月第一天是礼拜天,不用绘制上个月的日期,直接绘制这个月的日期} else {RelativeLayout group = getDateView(i, j);group.setGravity(Gravity.CENTER);TextView view = null;if (group.getChildCount() > 0) {view = (TextView) group.getChildAt(0);} else {LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -1);view = new TextView(getContext());view.setLayoutParams(params);view.setGravity(Gravity.CENTER);group.addView(view);}// 本月if (day <= lastDay) {dates[i][j] = format(new Date(calendarday.getYear(),calendarday.getMonth(), day));view.setText(Integer.toString(day));// 当天if (thisday.getDate() == day&& thisday.getMonth() == calendarday.getMonth()&& thisday.getYear() == calendarday.getYear()) {view.setText("今天");view.setTextColor(COLOR_TX_WEEK_TITLE);view.setBackgroundColor(Color.TRANSPARENT);} else {view.setTextColor(COLOR_TX_THIS_MONTH_DAY);view.setBackgroundColor(Color.TRANSPARENT);}// 上面首先设置了一下默认的"当天"背景色,当有特殊需求时,才给当日填充背景色// 设置日期背景色if (dayBgColorMap.get(dates[i][j]) != null) {view.setTextColor(Color.WHITE);view.setBackgroundResource(dayBgColorMap.get(dates[i][j]));}// 设置标记setMarker(group, i, j);day++;// 下个月} else {if (calendarday.getMonth() == Calendar.DECEMBER) {dates[i][j] = format(new Date(calendarday.getYear() + 1,Calendar.JANUARY, nextMonthDay));} else {dates[i][j] = format(new Date(calendarday.getYear(),calendarday.getMonth() + 1, nextMonthDay));}view.setText(Integer.toString(nextMonthDay));view.setTextColor(COLOR_TX_OTHER_MONTH_DAY);// 设置日期背景色if (dayBgColorMap.get(dates[i][j]) != null) {// view.setBackgroundResource(dayBgColorMap// .get(dates[i][j]));} else {view.setBackgroundColor(Color.TRANSPARENT);}// 设置标记setMarker(group, i, j);nextMonthDay++;}}}}}/** * onClick接口回调 */public interface OnCalendarClickListener {void onCalendarClick(int row, int col, String dateFormat);}/** * ondateChange接口回调 */public interface OnCalendarDateChangedListener {void onCalendarDateChanged(int year, int month);}/** * 根据具体的某年某月,展示一个日历 * * @param year * @param month */public void showCalendar(int year, int month) {calendarYear = year;calendarMonth = month - 1;calendarday = new Date(calendarYear - 1900, calendarMonth, 1);setCalendarDate();}/** * 根据当前月,展示一个日历 * * @param year * @param month */public void showCalendar() {Date now = new Date();calendarYear = now.getYear() + 1900;calendarMonth = now.getMonth();calendarday = new Date(calendarYear - 1900, calendarMonth, 1);setCalendarDate();}/** * 下一月日历 */public synchronized void nextMonth() {// 改变日历上下顺序if (currentCalendar == firstCalendar) {currentCalendar = secondCalendar;} else {currentCalendar = firstCalendar;}// 设置动画setInAnimation(push_left_in);setOutAnimation(push_left_out);// 改变日历日期if (calendarMonth == Calendar.DECEMBER) {calendarYear++;calendarMonth = Calendar.JANUARY;} else {calendarMonth++;}calendarday = new Date(calendarYear - 1900, calendarMonth, 1);// 填充日历setCalendarDate();// 下翻到下一月showNext();// 回调if (onCalendarDateChangedListener != null) {onCalendarDateChangedListener.onCalendarDateChanged(calendarYear,calendarMonth + 1);}}/** * 上一月日历 */public synchronized void lastMonth() {if (currentCalendar == firstCalendar) {currentCalendar = secondCalendar;} else {currentCalendar = firstCalendar;}setInAnimation(push_right_in);setOutAnimation(push_right_out);if (calendarMonth == Calendar.JANUARY) {calendarYear--;calendarMonth = Calendar.DECEMBER;} else {calendarMonth--;}calendarday = new Date(calendarYear - 1900, calendarMonth, 1);setCalendarDate();showPrevious();if (onCalendarDateChangedListener != null) {onCalendarDateChangedListener.onCalendarDateChanged(calendarYear,calendarMonth + 1);}}/** * 获取日历当前年份 */public int getCalendarYear() {return calendarday.getYear() + 1900;}/** * 获取日历当前月份 */public int getCalendarMonth() {return calendarday.getMonth() + 1;}/** * 在日历上做一个标记 * * @param date * 日期 * @param id * bitmap res id */public void addMark(Date date, int id) {addMark(format(date), id);}/** * 在日历上做一个标记 * * @param date * 日期 * @param id * bitmap res id */void addMark(String date, int id) {marksMap.put(date, id);setCalendarDate();}/** * 在日历上做一组标记 * * @param date * 日期 * @param id * bitmap res id */public void addMarks(Date[] date, int id) {for (int i = 0; i < date.length; i++) {marksMap.put(format(date[i]), id);}setCalendarDate();}/** * 在日历上做一组标记 * * @param date * 日期 * @param id * bitmap res id */public void addMarks(List<String> date, int id) {for (int i = 0; i < date.size(); i++) {marksMap.put(date.get(i), id);}setCalendarDate();}/** * 移除日历上的标记 */public void removeMark(Date date) {removeMark(format(date));}/** * 移除日历上的标记 */public void removeMark(String date) {marksMap.remove(date);setCalendarDate();}/** * 移除日历上的所有标记 */public void removeAllMarks() {marksMap.clear();setCalendarDate();}/** * 设置日历具体某个日期的背景色 * * @param date * @param color */public void setCalendarDayBgColor(Date date, int color) {setCalendarDayBgColor(format(date), color);}/** * 设置日历具体某个日期的背景色 * * @param date * @param color */void setCalendarDayBgColor(String date, int color) {dayBgColorMap.put(date, color);setCalendarDate();}/** * 设置日历一组日期的背景色 * * @param date * @param color */public void setCalendarDaysBgColor(List<String> date, int color) {for (int i = 0; i < date.size(); i++) {dayBgColorMap.put(date.get(i), color);}setCalendarDate();}/** * 设置日历一组日期的背景色 * * @param date * @param color */public void setCalendarDayBgColor(String[] date, int color) {for (int i = 0; i < date.length; i++) {dayBgColorMap.put(date[i], color);}setCalendarDate();}/** * 移除日历具体某个日期的背景色 * * @param date * @param color */public void removeCalendarDayBgColor(Date date) {removeCalendarDayBgColor(format(date));}/** * 移除日历具体某个日期的背景色 * * @param date * @param color */public void removeCalendarDayBgColor(String date) {dayBgColorMap.remove(date);setCalendarDate();}/** * 移除日历具体某个日期的背景色 * * @param date * @param color */public void removeAllBgColor() {dayBgColorMap.clear();setCalendarDate();}/** * 根据行列号获得包装每一个日子的LinearLayout * * @param row * @param col * @return */public String getDate(int row, int col) {return dates[row][col];}/** * 某天是否被标记了 * * @param year * @param month * @return */public boolean hasMarked(String date) {return marksMap.get(date) == null ? false : true;}/** * 清除所有标记以及背景 */public void clearAll() {marksMap.clear();dayBgColorMap.clear();}/*********************************************** * * private methods * **********************************************/// 设置标记private void setMarker(RelativeLayout group, int i, int j) {int childCount = group.getChildCount();if (marksMap.get(dates[i][j]) != null) {if (childCount < 2) {RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int) (tb * 0.7), (int) (tb * 0.7));params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);params.setMargins(0, 0, 1, 1);ImageView markView = new ImageView(getContext());markView.setImageResource(marksMap.get(dates[i][j]));markView.setLayoutParams(params);markView.setBackgroundResource(R.drawable.calendar_bg_tag);group.addView(markView);}} else {if (childCount > 1) {group.removeView(group.getChildAt(1));}}}/** * 计算某年某月有多少天 * * @param year * @param month * @return */private int getDateNum(int year, int month) {Calendar time = Calendar.getInstance();time.clear();time.set(Calendar.YEAR, year + 1900);time.set(Calendar.MONTH, month);return time.getActualMaximum(Calendar.DAY_OF_MONTH);}/** * 根据行列号获得包装每一个日子的LinearLayout * * @param row * @param col * @return */private RelativeLayout getDateView(int row, int col) {return (RelativeLayout) ((LinearLayout) ((LinearLayout) currentCalendar.getChildAt(1)).getChildAt(row)).getChildAt(col);}/** * 将Date转化成字符串->2013-3-3 */private String format(Date d) {return addZero(d.getYear() + 1900, 4) + "-"+ addZero(d.getMonth() + 1, 2) + "-" + addZero(d.getDate(), 2);}// 2或4private static String addZero(int i, int count) {if (count == 2) {if (i < 10) {return "0" + i;}} else if (count == 4) {if (i < 10) {return "000" + i;} else if (i < 100 && i > 10) {return "00" + i;} else if (i < 1000 && i > 100) {return "0" + i;}}return "" + i;}/*********************************************** * * Override methods * **********************************************/public boolean dispatchTouchEvent(MotionEvent ev) {if (gd != null) {if (gd.onTouchEvent(ev))return true;}return super.dispatchTouchEvent(ev);}public boolean onTouchEvent(MotionEvent event) {return this.gd.onTouchEvent(event);}public boolean onDown(MotionEvent e) {return false;}public void onShowPress(MotionEvent e) {}public boolean onSingleTapUp(MotionEvent e) {return false;}public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}public void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {// 向左/上滑动if (e1.getX() - e2.getX() > 20) {nextMonth();}// 向右/下滑动else if (e1.getX() - e2.getX() < -20) {lastMonth();}return false;}/*********************************************** * * get/set methods * **********************************************/public OnCalendarClickListener getOnCalendarClickListener() {return onCalendarClickListener;}public void setOnCalendarClickListener(OnCalendarClickListener onCalendarClickListener) {this.onCalendarClickListener = onCalendarClickListener;}public OnCalendarDateChangedListener getOnCalendarDateChangedListener() {return onCalendarDateChangedListener;}public void setOnCalendarDateChangedListener(OnCalendarDateChangedListener onCalendarDateChangedListener) {this.onCalendarDateChangedListener = onCalendarDateChangedListener;}public Date getThisday() {return thisday;}public void setThisday(Date thisday) {this.thisday = thisday;}public Map<String, Integer> getDayBgColorMap() {return dayBgColorMap;}public void setDayBgColorMap(Map<String, Integer> dayBgColorMap) {this.dayBgColorMap = dayBgColorMap;}}
好了,万事俱备,只欠东风啦!
看下这股东风是如何吹的(也就是我们MainActivity)
package com.fancyy.calendarweight;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.pm.ActivityInfo;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.TextView;import com.fancyy.calendarweight.KCalendar.OnCalendarClickListener;import com.fancyy.calendarweight.KCalendar.OnCalendarDateChangedListener;public class MainActivity extends Activity {String date = null;// 设置默认选中的日期 格式为 “2014-04-05” 标准DATE格式 Button bt;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);PopupWindows();}public void PopupWindows() {final TextView popupwindow_calendar_month = (TextView) findViewById(R.id.popupwindow_calendar_month);final KCalendar calendar = (KCalendar) findViewById(R.id.popupwindow_calendar);popupwindow_calendar_month.setText(calendar.getCalendarYear() + "年"+ calendar.getCalendarMonth() + "月");if (null != date) {int years = Integer.parseInt(date.substring(0,date.indexOf("-")));int month = Integer.parseInt(date.substring(date.indexOf("-") + 1, date.lastIndexOf("-")));popupwindow_calendar_month.setText(years + "年" + month + "月");calendar.showCalendar(years, month);calendar.setCalendarDayBgColor(date,R.drawable.calendar_date_focused);}List<String> list = new ArrayList<String>(); //设置标记列表list.add("2014-04-01");list.add("2014-04-02");calendar.addMarks(list, 0);//监听所选中的日期calendar.setOnCalendarClickListener(new OnCalendarClickListener() {public void onCalendarClick(int row, int col, String dateFormat) {int month = Integer.parseInt(dateFormat.substring(dateFormat.indexOf("-") + 1,dateFormat.lastIndexOf("-")));if (calendar.getCalendarMonth() - month == 1//跨年跳转|| calendar.getCalendarMonth() - month == -11) {calendar.lastMonth();} else if (month - calendar.getCalendarMonth() == 1 //跨年跳转|| month - calendar.getCalendarMonth() == -11) {calendar.nextMonth();} else {calendar.removeAllBgColor(); calendar.setCalendarDayBgColor(dateFormat,R.drawable.calendar_date_focused);date = dateFormat;//最后返回给全局 date/* * 这里可以跳转到其他界面 */}}});//监听当前月份calendar.setOnCalendarDateChangedListener(new OnCalendarDateChangedListener() {public void onCalendarDateChanged(int year, int month) {popupwindow_calendar_month.setText(year + "年" + month + "月");}});//上月监听按钮RelativeLayout popupwindow_calendar_last_month = (RelativeLayout) findViewById(R.id.popupwindow_calendar_last_month);popupwindow_calendar_last_month.setOnClickListener(new OnClickListener() {public void onClick(View v) {calendar.lastMonth();}});//下月监听按钮RelativeLayout popupwindow_calendar_next_month = (RelativeLayout) findViewById(R.id.popupwindow_calendar_next_month);popupwindow_calendar_next_month.setOnClickListener(new OnClickListener() {public void onClick(View v) {calendar.nextMonth();}});}}
到目前你就可以看到以上的效果啦!
资料下载如下:
http://download.csdn.net/detail/hehaiminginadth/9083207
0 0
- android 好看的自定义日历
- 简介好看的anroid自定义日历控件,源码
- 好看适用的日历控件
- 一款好看的日历控件
- android自定义实现好看的对话框
- android实现好看的自定义提示框
- android自定义日历的使用方法
- 好看的 自定义AlertDialog
- 自定义好看的吐司
- ASP.NET 好看适用的日历控件
- Android 好看的自定义滚动式日期选择控件
- Android 好看的自定义滚动式日期选择控件
- android 自定义View 稍微好看一点的圆形进度条
- Android带日程安排的自定义日历控件
- android 可签到的自定义日历控件
- android 可签到的自定义日历控件
- android 可签到的自定义日历控件
- android方便自定义ui,功能的日历
- Android最佳实践之:StrictMode介绍
- 使用Intellij14导入Android Library工程
- IIS是如何处理ASP.NET请求的
- StaticLayout
- 传递二维数组作为参数的指针
- android 好看的自定义日历
- 精通Hibernate——数据库的事务与声明事务边界
- WebViewJavascriptBridge(OC部分)
- java设计模式第1弹---适配器模式
- HDU 3065 病毒侵袭持续中(AC自动机裸)
- ZOJ 3210 A Stack or A Queue?
- 数据结构中的查找算法-哈希表(3)
- CentOS下安装nginx rpm包
- UE4的编译配置详解