如何写日历中的一个小方块

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);
    }
}

 效果是如下图:


猜你喜欢

转载自blog.csdn.net/baidu_nod/article/details/80989270
今日推荐