在 Android 日历上用星形图标标记打卡成功日期

想要在日历上以星型标记打卡成功的日期,你可以自定义一个星型的图标,并将其设置为日历上标记的自定义视图。以下是修改后的代码:

  1. 首先,在res目录下创建一个名为drawable的文件夹,并在该文件夹中添加一个名为ic_star.xml的矢量图标文件。可以使用矢量图形编辑器创建一个星型图标,或者使用现有的图标资源。

  2. MainActivityonClick方法中,添加设置自定义视图的代码:

checkInButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String currentDate = getCurrentDate();
        String currentTime = getCurrentTime();

        CheckIn checkIn = new CheckIn(currentDate, currentTime);
        appDatabase.checkInDao().insert(checkIn);

        Toast.makeText(MainActivity.this, '打卡成功:' + currentDate + ' ' + currentTime, Toast.LENGTH_SHORT).show();

        // 在日历上显示标记
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse(currentDate);
            long timeInMillis = date.getTime();
            calendarView.setDate(timeInMillis);
            calendarView.setActivated(true);

            // 设置自定义视图
            calendarView.setCustomDayView(new CustomDayView(MainActivity.this));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
});
  1. 创建一个名为CustomDayView的类,继承自DayViewDecorator,用于自定义日历上的标记视图。
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import com.prolificinteractive.materialcalendarview.spans.DotSpan;

public class CustomDayView implements DayViewDecorator {

    private final Drawable starDrawable;

    public CustomDayView(Context context) {
        starDrawable = context.getResources().getDrawable(R.drawable.ic_star);
    }

    @Override
    public boolean shouldDecorate(CalendarDay day) {
        // 在这里判断是否需要标记该日期
        // 这里假设已经打卡的日期需要标记
        String date = formatDate(day.getYear(), day.getMonth(), day.getDay());
        List<CheckIn> checkIns = appDatabase.checkInDao().getAllCheckIns();
        for (CheckIn checkIn : checkIns) {
            if (checkIn.getDate().equals(date)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void decorate(DayViewFacade view) {
        // 设置标记视图
        view.setBackgroundDrawable(starDrawable);
    }

    private String formatDate(int year, int month, int dayOfMonth) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date(year - 1900, month, dayOfMonth);
        return sdf.format(date);
    }
}

请确保将CustomDayView类中的shouldDecorate方法中的判断逻辑根据你的需求进行修改。

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

Android 日历打卡标记:用星形图标显示打卡成功日期

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

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