package cn.flightfeather.thirdapp.view.calendarview;
|
|
import android.content.Context;
|
import android.graphics.Canvas;
|
import android.graphics.Paint;
|
import android.graphics.RectF;
|
|
import com.haibin.calendarview.Calendar;
|
import com.haibin.calendarview.WeekView;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* @author riku
|
* 2019.3.29
|
* 精美进度风格
|
*/
|
|
public class ProgressWeekView extends WeekView {
|
|
private Paint mProgressPaint = new Paint();
|
private Paint mTagPaint = new Paint();
|
private Paint mNoneProgressPaint = new Paint();
|
private List<Integer> colorList = new ArrayList<>();
|
private int mRadius;
|
private int tagRadius;
|
|
public ProgressWeekView(Context context) {
|
super(context);
|
mProgressPaint.setAntiAlias(true);
|
mProgressPaint.setStyle(Paint.Style.STROKE);
|
mProgressPaint.setStrokeWidth(dipToPx(context, 2.2f));
|
mProgressPaint.setColor(0xBBf54a00);
|
|
mTagPaint.setAntiAlias(true);
|
mTagPaint.setStyle(Paint.Style.STROKE);
|
// mTagPaint.setStrokeWidth(dipToPx(context, 2.2f));
|
mTagPaint.setColor(0xF700F5BC);
|
|
colorList.add(0xBBf54a00);
|
colorList.add(0xF700F5BC);
|
|
mNoneProgressPaint.setAntiAlias(true);
|
mNoneProgressPaint.setStyle(Paint.Style.STROKE);
|
mNoneProgressPaint.setStrokeWidth(dipToPx(context, 2.2f));
|
mNoneProgressPaint.setColor(0x90CfCfCf);
|
}
|
|
@Override
|
protected void onPreviewHook() {
|
mRadius = Math.min(mItemWidth, mItemHeight) / 11 * 4;
|
}
|
|
@Override
|
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, boolean hasScheme) {
|
int cx = x + mItemWidth / 2;
|
int cy = mItemHeight / 2;
|
int tempRadius = (int) (mRadius - mProgressPaint.getStrokeWidth() - dipToPx(getContext(), 2f));
|
canvas.drawCircle(cx, cy, tempRadius, mSelectedPaint);
|
return true;
|
}
|
|
@Override
|
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x) {
|
// int cx = x + mItemWidth / 2;
|
// int cy = mItemHeight / 2;
|
//
|
// int mode = 0;
|
// int progress = 0;
|
// for (Calendar.Scheme s : calendar.getSchemes()) {
|
// if (s.getType() == 1) {
|
// progress = Integer.parseInt(s.getScheme());
|
// break;
|
// }
|
// mode++;
|
// }
|
//
|
// int angle = getAngle(progress);
|
//
|
// RectF progressRectF = new RectF(cx - mRadius, cy - mRadius, cx + mRadius, cy + mRadius);
|
// switch (mode) {
|
// case 0:
|
// canvas.drawArc(progressRectF, -90, angle, false, mProgressPaint);
|
// break;
|
// case 1:
|
// canvas.drawArc(progressRectF, -90, angle, false, mTagPaint);
|
// break;
|
// }
|
//
|
// RectF noneRectF = new RectF(cx - mRadius, cy - mRadius, cx + mRadius, cy + mRadius);
|
// canvas.drawArc(noneRectF, angle - 90, 360 - angle, false, mNoneProgressPaint);
|
|
int cx = x + mItemWidth / 2;
|
int cy = mItemHeight / 2;
|
|
int index = 0;
|
int progress = 0;
|
RectF progressRectF = new RectF(cx - mRadius, cy - mRadius, cx + mRadius, cy + mRadius);
|
for (Calendar.Scheme s : calendar.getSchemes()) {
|
//type == 1,画进度条
|
if (s.getType() == 1) {
|
progress = Integer.parseInt(s.getScheme());
|
mProgressPaint.setColor(colorList.get(index % 2));
|
int angle = getAngle(progress);
|
canvas.drawArc(progressRectF, -90, angle, false, mProgressPaint);
|
RectF noneRectF = new RectF(cx - mRadius, cy - mRadius, cx + mRadius, cy + mRadius);
|
canvas.drawArc(noneRectF, angle - 90, 360 - angle, false, mNoneProgressPaint);
|
}
|
//type == 2,画标记
|
else if (s.getType() == 2) {
|
Paint.FontMetrics fontMetrics = mSelectTextPaint.getFontMetrics();
|
float textBottomY = mTextBaseLine + fontMetrics.bottom;
|
float cardBottomY = mItemHeight;
|
// float tagCy = (textBottomY + cardBottomY) / 2;
|
float tagCy = (textBottomY + 4);
|
canvas.drawCircle((float) cx, tagCy, tagRadius, mTagPaint);
|
}
|
index++;
|
}
|
}
|
|
@Override
|
protected void onDrawText(Canvas canvas, Calendar calendar, int x, boolean hasScheme, boolean isSelected) {
|
float baselineY = mTextBaseLine;
|
int cx = x + mItemWidth / 2;
|
|
if (isSelected) {
|
canvas.drawText(String.valueOf(calendar.getDay()),
|
cx,
|
baselineY,
|
mSelectTextPaint);
|
} else if (hasScheme) {
|
canvas.drawText(String.valueOf(calendar.getDay()),
|
cx,
|
baselineY,
|
calendar.isCurrentDay() ? mCurDayTextPaint :
|
calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
|
|
} else {
|
canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY,
|
calendar.isCurrentDay() ? mCurDayTextPaint :
|
calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
|
}
|
}
|
|
/**
|
* 获取角度
|
*
|
* @param progress 进度
|
* @return 获取角度
|
*/
|
private static int getAngle(int progress) {
|
return (int) (progress * 3.6);
|
}
|
|
|
/**
|
* dp转px
|
*
|
* @param context context
|
* @param dpValue dp
|
* @return px
|
*/
|
@SuppressWarnings("all")
|
private static int dipToPx(Context context, float dpValue) {
|
final float scale = context.getResources().getDisplayMetrics().density;
|
return (int) (dpValue * scale + 0.5f);
|
}
|
}
|