Android 日历打卡成功后标记星型
要在日历上显示星型标记,你可以使用自定义的DayViewDecorator来实现。首先,创建一个名为StarDecorator的类,实现DayViewDecorator接口,并重写decorate()方法来自定义标记的样式。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.View;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
public class StarDecorator implements DayViewDecorator {
private final Context context;
private final CalendarDay date;
public StarDecorator(Context context, CalendarDay date) {
this.context = context;
this.date = date;
}
@Override
public boolean shouldDecorate(CalendarDay day) {
return date != null && day.equals(date);
}
@Override
public void decorate(DayViewFacade view) {
view.addSpan(new CustomSpan());
}
private class CustomSpan extends View {
private final Paint paint;
public CustomSpan() {
super(context);
paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect bounds = canvas.getClipBounds();
int centerX = bounds.centerX();
int centerY = bounds.centerY();
int radius = Math.min(bounds.width(), bounds.height()) / 2;
Path path = new Path();
path.moveTo(centerX, centerY - radius);
path.lineTo(centerX + radius * 0.4f, centerY - radius * 0.4f);
path.lineTo(centerX + radius, centerY);
path.lineTo(centerX + radius * 0.4f, centerY + radius * 0.4f);
path.lineTo(centerX, centerY + radius);
path.lineTo(centerX - radius * 0.4f, centerY + radius * 0.4f);
path.lineTo(centerX - radius, centerY);
path.lineTo(centerX - radius * 0.4f, centerY - radius * 0.4f);
path.close();
canvas.drawPath(path, paint);
}
}
}
然后,在MainActivity的onClick()方法中,添加以下代码来应用StarDecorator并刷新日历视图:
checkInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String currentDate = getCurrentDate();
// 在日历上显示标记
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(currentDate);
CalendarDay calendarDay = CalendarDay.from(date);
calendarView.setDateSelected(calendarDay, true);
calendarView.addDecorator(new StarDecorator(MainActivity.this, calendarDay));
} catch (ParseException e) {
e.printStackTrace();
}
}
});
现在,当你点击打卡按钮后,选中的日期将会在日历上显示一个星型标记,以表示已经打卡成功。
原文地址: http://www.cveoy.top/t/topic/bLCk 著作权归作者所有。请勿转载和采集!