先来效果图:
日历部分参考了网络上找到的一个日历类,里面抽象出来了好多方法,基本上满足了对签到的需求,如有需要也可以根据项目实际情况进行定制。
public class SignCalendar extends ViewFlipper implements android.view.GestureDetector.OnGestureListener
该类继承自ViewFlipper,能够很好的实现不同月的日历之间的切换和动画,还实现了手势监听。
首先介绍一下该类的一些主要方法:
private void drawFrame(LinearLayout oneCalendar);//画日历的框架
private void setCalendarDate();//填充日历,包括日期、背景和标记
public synchronized void nextMonth() ;//滑动时显示下一个月
public synchronized void lastMonth() ;//滑动时显示上一个月
//设置和移除日期标记的各种方法
public void addMark(Date date, int id);public void removeMark(Date date);
public void addMark(String date, int id) ; public void removeMark(String date);
public void addMarks(Date[] date, int id);public void removeAllMarks();
public void addMarks(List<String> date, int id);
//设置和移除日期背景的方法
public void setCalendarDayBgColor(Date date, int color); public void removeCalendarDayBgColor(Date date);
public void setCalendarDayBgColor(String date, int color); public void removeCalendarDayBgColor(String date);
public void setCalendarDaysBgColor(List<String> date, int color);public void removeAllBgColor();
public void setCalendarDayBgColor(String[] date, int color);
public boolean hasMarked(String date);
//移除标记和背景设置
public void clearAll();
此外还提供了两个回调接口:
private OnCalendarClickListener onCalendarClickListener; // 日历翻页回调
private OnCalendarDateChangedListener onCalendarDateChangedListener; // 日历点击回调,根据需要添加
接下来,介绍一下日历框架的绘制,整个布局是在代码里实现的,先看下drawFrame方法吧:
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(MarginLayoutParams.MATCH_PARENT,