要在日历上显示星型标记,你可以使用自定义的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);
        }
    }
}

然后,在MainActivityonClick()方法中,添加以下代码来应用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();
        }
    }
});

现在,当你点击打卡按钮后,选中的日期将会在日历上显示一个星型标记,以表示已经打卡成功。

Android 日历打卡成功后标记星型

原文地址: http://www.cveoy.top/t/topic/bLCk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录