|
|
package com.rehome.sbcksyy.weiget;
|
|
|
|
|
|
/**
|
|
|
* Create By HuangWenFei
|
|
|
* 创建日期:2022-12-22 14:19
|
|
|
* 描述:
|
|
|
*/
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.graphics.Canvas;
|
|
|
import android.graphics.Color;
|
|
|
import android.graphics.Paint;
|
|
|
import android.text.TextUtils;
|
|
|
|
|
|
import com.haibin.calendarview.Calendar;
|
|
|
import com.haibin.calendarview.MonthView;
|
|
|
|
|
|
/**
|
|
|
* 演示一个变态需求的月视图
|
|
|
* Created by huanghaibin on 2018/2/9.
|
|
|
*/
|
|
|
|
|
|
public class CustomMonthView extends MonthView {
|
|
|
|
|
|
private int mRadius;
|
|
|
|
|
|
/**
|
|
|
* 自定义魅族标记的文本画笔
|
|
|
*/
|
|
|
private Paint mTextPaint = new Paint();
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 24节气画笔
|
|
|
*/
|
|
|
private Paint mSolarTermTextPaint = new Paint();
|
|
|
|
|
|
/**
|
|
|
* 背景圆点
|
|
|
*/
|
|
|
private Paint mPointPaint = new Paint();
|
|
|
|
|
|
/**
|
|
|
* 今天的背景色
|
|
|
*/
|
|
|
private Paint mCurrentDayPaint = new Paint();
|
|
|
|
|
|
/**
|
|
|
* 圆点半径
|
|
|
*/
|
|
|
private float mPointRadius;
|
|
|
|
|
|
private int mPadding;
|
|
|
|
|
|
private float mCircleRadius;
|
|
|
/**
|
|
|
* 自定义魅族标记的圆形背景
|
|
|
*/
|
|
|
private Paint mSchemeBasicPaint = new Paint();
|
|
|
|
|
|
private float mSchemeBaseLine;
|
|
|
|
|
|
public CustomMonthView(Context context) {
|
|
|
super(context);
|
|
|
|
|
|
mTextPaint.setTextSize(dipToPx(context, 8));
|
|
|
mTextPaint.setColor(0xffffffff);
|
|
|
mTextPaint.setAntiAlias(true);
|
|
|
mTextPaint.setFakeBoldText(true);
|
|
|
|
|
|
|
|
|
mSolarTermTextPaint.setColor(0xff489dff);
|
|
|
mSolarTermTextPaint.setAntiAlias(true);
|
|
|
mSolarTermTextPaint.setTextAlign(Paint.Align.CENTER);
|
|
|
|
|
|
mSchemeBasicPaint.setAntiAlias(true);
|
|
|
mSchemeBasicPaint.setStyle(Paint.Style.FILL);
|
|
|
mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);
|
|
|
mSchemeBasicPaint.setFakeBoldText(true);
|
|
|
mSchemeBasicPaint.setColor(Color.WHITE);
|
|
|
|
|
|
|
|
|
mCurrentDayPaint.setAntiAlias(true);
|
|
|
mCurrentDayPaint.setStyle(Paint.Style.FILL);
|
|
|
mCurrentDayPaint.setColor(0xFFeaeaea);
|
|
|
|
|
|
mPointPaint.setAntiAlias(true);
|
|
|
mPointPaint.setStyle(Paint.Style.FILL);
|
|
|
mPointPaint.setTextAlign(Paint.Align.CENTER);
|
|
|
mPointPaint.setColor(Color.RED);
|
|
|
|
|
|
mCircleRadius = dipToPx(getContext(), 7);
|
|
|
|
|
|
mPadding = dipToPx(getContext(), 3);
|
|
|
|
|
|
mPointRadius = dipToPx(context, 2);
|
|
|
|
|
|
Paint.FontMetrics metrics = mSchemeBasicPaint.getFontMetrics();
|
|
|
mSchemeBaseLine = mCircleRadius - metrics.descent + (metrics.bottom - metrics.top) / 2 + dipToPx(getContext(), 1);
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
protected void onPreviewHook() {
|
|
|
mSolarTermTextPaint.setTextSize(mCurMonthLunarTextPaint.getTextSize());
|
|
|
mRadius = Math.min(mItemWidth, mItemHeight) / 11 * 5;
|
|
|
mSchemePaint.setStyle(Paint.Style.STROKE);
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
|
|
|
int cx = x + mItemWidth / 2;
|
|
|
int cy = y + mItemHeight / 2;
|
|
|
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
|
|
|
|
|
|
int cx = x + mItemWidth / 2;
|
|
|
int cy = y + mItemHeight / 2;
|
|
|
canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
|
|
|
|
|
|
// boolean isSelected = isSelected(calendar);
|
|
|
// if (isSelected) {
|
|
|
// mPointPaint.setColor(Color.WHITE);
|
|
|
// } else {
|
|
|
// mPointPaint.setColor(Color.GRAY);
|
|
|
// }
|
|
|
//
|
|
|
// canvas.drawCircle(x + mItemWidth / 2, y + mItemHeight - 3 * mPadding, mPointRadius, mPointPaint);
|
|
|
}
|
|
|
|
|
|
@SuppressWarnings("IntegerDivisionInFloatingPointContext")
|
|
|
@Override
|
|
|
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
|
|
|
int cx = x + mItemWidth / 2;
|
|
|
int cy = y + mItemHeight / 2;
|
|
|
int top = y - mItemHeight / 6;
|
|
|
|
|
|
if (calendar.isCurrentDay() && !isSelected) {
|
|
|
canvas.drawCircle(cx, cy, mRadius, mCurrentDayPaint);
|
|
|
}
|
|
|
|
|
|
// if (hasScheme) {
|
|
|
// canvas.drawCircle(x + mItemWidth - mPadding - mCircleRadius / 2, y + mPadding + mCircleRadius, mCircleRadius, mSchemeBasicPaint);
|
|
|
// mTextPaint.setColor(calendar.getSchemeColor());
|
|
|
// canvas.drawText(calendar.getScheme(), x + mItemWidth - mPadding - mCircleRadius, y + mPadding + mSchemeBaseLine, mTextPaint);
|
|
|
// }
|
|
|
|
|
|
//当然可以换成其它对应的画笔就不麻烦,
|
|
|
if (calendar.isWeekend() && calendar.isCurrentMonth()) {
|
|
|
mCurMonthTextPaint.setColor(0xFF489dff);
|
|
|
mCurMonthLunarTextPaint.setColor(0xFF489dff);
|
|
|
mSchemeTextPaint.setColor(0xFF489dff);
|
|
|
mSchemeLunarTextPaint.setColor(0xFF489dff);
|
|
|
mOtherMonthLunarTextPaint.setColor(0xFF489dff);
|
|
|
mOtherMonthTextPaint.setColor(0xFF489dff);
|
|
|
} else {
|
|
|
mCurMonthTextPaint.setColor(0xff333333);
|
|
|
mCurMonthLunarTextPaint.setColor(0xffCFCFCF);
|
|
|
mSchemeTextPaint.setColor(0xff333333);
|
|
|
mSchemeLunarTextPaint.setColor(0xffCFCFCF);
|
|
|
|
|
|
mOtherMonthTextPaint.setColor(0xFFe1e1e1);
|
|
|
mOtherMonthLunarTextPaint.setColor(0xFFe1e1e1);
|
|
|
}
|
|
|
|
|
|
if (isSelected) {
|
|
|
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
|
|
|
mSelectTextPaint);
|
|
|
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10, mSelectedLunarTextPaint);
|
|
|
} else if (hasScheme) {
|
|
|
|
|
|
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
|
|
|
calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
|
|
|
|
|
|
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10,
|
|
|
!TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint : mSchemeLunarTextPaint);
|
|
|
} else {
|
|
|
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
|
|
|
calendar.isCurrentDay() ? mCurDayTextPaint :
|
|
|
calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
|
|
|
|
|
|
canvas.drawText(calendar.getLunar(), cx, mTextBaseLine + y + mItemHeight / 10,
|
|
|
calendar.isCurrentDay() ? mCurDayLunarTextPaint :
|
|
|
calendar.isCurrentMonth() ? !TextUtils.isEmpty(calendar.getSolarTerm()) ? mSolarTermTextPaint :
|
|
|
mCurMonthLunarTextPaint : mOtherMonthLunarTextPaint);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* dp转px
|
|
|
*
|
|
|
* @param context context
|
|
|
* @param dpValue dp
|
|
|
* @return px
|
|
|
*/
|
|
|
private static int dipToPx(Context context, float dpValue) {
|
|
|
final float scale = context.getResources().getDisplayMetrics().density;
|
|
|
return (int) (dpValue * scale + 0.5f);
|
|
|
}
|
|
|
}
|