public class PaintView extends View {
private static final String TAG = "CalendarView";
/**
* 默认cell上下左右间距:4px,使绘制的View有网格效果
*/
public static final float DEFAULT_SPACING_CELL = 4f;
/**
* 默认最右边和最左边间距:4px,使绘制的View有网格效果
*/
public static final float DEFAULT_SPACING_CELL_LEFT_RIGHT = DEFAULT_SPACING_CELL / 2;
/**
* 默认一个cell减去这个数的4倍后三等分,用以绘制状态图标的坐标位置(使图标之间有空隙)
*/
private final float DEFAULT_AVG_CELL = 10f;
/**
* 一个cell三等分,用以绘制状态图标的坐标位置(宽)
*/
private float defaultAvgCellWidth = 1f;
/**
* 一个cell三等分,用以绘制状态图标的坐标位置(高)
*/
private float defaultAvgCellHeight = 1f;
/**
* 文本画笔默认大小
*/
private float defaultTextPatinSize = 1f;
/**
* 两种模式 (月份和星期):暂时不需要
*/
public static final int MONTH_STYLE = 0;
public static final int WEEK_STYLE = 1;
/**
* 日历模块上面的字体大小
*/
private static final float CALENDAR_TEXT_SIZE = 17f;
/**
* 周首日两种风格 (一周第一天是周日和一周第一天是周一)
*/
public static final int SUN_WEEK_STYLE = 0;//一周第一天是周日
public static final int MON_WEEK_STYLE = 1;//一周第一天是周一
public static final int TOTAL_COL = 7;
public static final int TOTAL_ROW = 6;
private Paint mRectPaint;
private Paint mTextPaint;
private Paint mBgPaint;
private float mViewWidth;
private float mViewHight;
private float mCellSpaceWidth;
private float mCellSpaceHeight;
private Handler mHandler = new Handler();
public PaintView(Context context, AttributeSet attrs) {
super(context, attrs);
setBgPaint(R.color.lactation_tutorial_background_white_an_alp); // 预测经期
initCalendarItem(context);
setTextPaint(mTextPaint.getColor(), defaultTextPatinSize);
}
private void fillIcon(Canvas canvas, int i, int j) {
}
private void showIconA(Canvas canvas, int i, int j, Bitmap bitmap) {
float cellRight = (float) ((i + 1.0) * mCellSpaceWidth) + DEFAULT_SPACING_CELL * (i + 1.0f) + DEFAULT_SPACING_CELL_LEFT_RIGHT;
float cellTop = (float) (j * mCellSpaceHeight) + DEFAULT_SPACING_CELL * (j + 1.0f);
canvas.drawBitmap(bitmap, (float) (cellRight - bitmap.getWidth() - DEFAULT_AVG_CELL), (float) (cellTop + DEFAULT_AVG_CELL), mTextPaint);
}
private void initCalendarItem(Context context) {
mViewWidth = DeviceUtils.getScreenWidth(context);
mViewHight = DeviceUtils.getScreenHeight(context);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mCellSpaceWidth = (mViewWidth - DEFAULT_SPACING_CELL * 7) / TOTAL_COL;// Math.min((int) (mViewHight - DEFAULT_SPACING_CELL * 7) /
mCellSpaceHeight = mCellSpaceWidth * 0.85f;//cell长宽比4:3
LogUtils.i("initCalendarItem->>mViewWidth", mViewWidth + "::" + mCellSpaceWidth);
defaultTextPatinSize = mCellSpaceHeight / 3f;
defaultAvgCellWidth = (mCellSpaceWidth - 4 * DEFAULT_AVG_CELL) / 3f;
defaultAvgCellHeight = (mCellSpaceHeight - 4 * DEFAULT_AVG_CELL) / 3f;
defaultTextPatinSize = DeviceUtils.sp2px(context, CALENDAR_TEXT_SIZE);
mTextPaint.setTextSize(defaultTextPatinSize);
}
private void setTextPaint(int color, float size) {
if (mTextPaint == null) {
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
mTextPaint.setTextSize(size);
mTextPaint.setColor(color);
}
private void drawDateNo(Canvas canvas, String content, int i, int j) {
canvas.drawText(content,
(float) ((i + 0.3) * mCellSpaceWidth - mTextPaint.measureText(content) / 2) + DEFAULT_SPACING_CELL * (i) +
DEFAULT_SPACING_CELL_LEFT_RIGHT,
(float) ((j + 0.6) * mCellSpaceHeight - mTextPaint.measureText(
content, 0, 1) / 2) + DEFAULT_SPACING_CELL * (j), mTextPaint);
}
private void setBgPaint(int color) {
if (mBgPaint == null) {
mBgPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBgPaint.setStyle(Paint.Style.FILL);
}
mBgPaint.setColor(color);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
drawBg(canvas, 3, 3, mBgPaint);
showIconA(canvas, 3, 3, CalendarItemBitmapHolder.getBitmapViaResId(getContext(), 13));
drawDateNo(canvas, "12", 3, 3);
}
private void drawBg(Canvas canvas, int i, int j, Paint mPaint) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
RectF rectF = new RectF();
rectF.left = (i * mCellSpaceWidth) + DEFAULT_SPACING_CELL * (i) + DEFAULT_SPACING_CELL_LEFT_RIGHT; //左边
rectF.top = (j * mCellSpaceHeight) + DEFAULT_SPACING_CELL * (j + 1);
rectF.right = (float) ((i + 1.0) * mCellSpaceWidth) + DEFAULT_SPACING_CELL * (i) + DEFAULT_SPACING_CELL_LEFT_RIGHT;
rectF.bottom = (float) ((j + 1.0) * mCellSpaceHeight) + DEFAULT_SPACING_CELL * (j + 1);
canvas.drawRoundRect(rectF, 10f, 10f, paint);
}
}
效果是如下图: