转载请标明出处: http://blog.csdn.net/airsaid/article/details/52139045
本文出自:周游的博客
效果图
开发环境
IDE版本:AndroidStudio2.0
物理机版本:Win7旗舰版(64位)
前言
最近的项目中用到了一个课程选择的日历View,于是在网上搜了搜自定义日历View,发现基本上都是单选的,不能够满足项目中的需求。于是自己重新造了个轮子,写了个可以被多选的自定义日历View。最后面会给出GitHub地址。
代码实现
package widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import com.arisaid.calendarview.R;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* Created by zhouyou on 2016/7/25.
* Class desc:
*
* 自定义日历View,可多选
*/
public class CalendarView extends View {
// 列的数量
private static final int NUM_COLUMNS = 7;
// 行的数量
private static final int NUM_ROWS = 6;
/**
* 可选日期数据
*/
private List<String> mOptionalDates;
/**
* 以选日期数据
*/
private List<String> mSelectedDates = new ArrayList<>();
// 背景颜色
private int mBgColor = Color.parseColor("#F7F7F7");
// 天数默认颜色
private int mDayNormalColor = Color.parseColor("#0070F8");
// 天数不可选颜色
private int mDayNotOptColor = Color.parseColor("#CBCBCB");
// 天数选择后颜色
private int mDayPressedColor = Color.WHITE;
// 天数字体大小
private int mDayTextSize = 14;
// 是否可以被点击状态
private boolean mClickable = true;
private DisplayMetrics mMetrics;
private Paint mPaint;
private int mCurYear;
private int mCurMonth;
private int mCurDate;
private int mSelYear;
private int mSelMonth;
private int mSelDate;
private int mColumnSize;
private int mRowSize;
private int[][] mDays;
// 当月一共有多少天
private int mMonthDays;
// 当月第一天位于周几
private