高仿小米日历

高仿小米日历

https://github.com/wuda615/StickyCalendar

[TOC]

使用方式

导入

Download

Gradle

compile 'com.github.wuda615:StickyCalendar-release:1.0.1'

xml添加布局


    

  1. 将要包含的滑动控件放置在 ClpsCalendarWrapperLayout,可以是任何View,包括但不限于ListView,ScrollView,RecyclerView。

  2. 对于需要使用自定义item样式或内容的日历,提供app:calendarItemId 属性自由替换对应的布局,@layout/item_calendar_demo对应的布局文件完全样式由用户自己定义(是否显示农历,当天是否红点标识事件等),当然不设置将使用默认的样式。

  3. ClpsCalendarWrapperLayout和包含的控件联系起来app:contentId="@+id/lv_bottom",这个属性是必须设置,否则滑动事件无法关联。

自定义日历Item样式和内容

这里只是简单的设置日历Item样式,当天红色背景白色文字高亮,选中的日期有个蓝色圆环高亮,周二、周五都用绿色标识当天有事件

  1. 设置Item布局文件`item_calendar_demo.xml


    
    

包含一个用来显示日期的TextView和一个标识事件的ImageView

2.Item视图更新逻辑
设置setRenderItemCallBack更新回调,通过CommonViewHolderDateBeanWrapper来判断该如何处理自己的视图显示

calendar.setRenderItemCallBack(new RenderItemCallBack() {
    @Override
    public void onItemRender(CommonViewHolder viewHolder, DateBeanWrapper dateBean) {
        rendItemView(viewHolder, dateBean);
    }
});

参考本例需求代码rendItemView(viewHolder, dateBean)

private void rendItemView(CommonViewHolder viewHolder, DateBeanWrapper dateBean) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateBean.getDate());
        String text = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
        viewHolder.setText(R.id.tx_date, text);
        boolean isCurrentMonth = dateBean.getMonthType() == DateBeanWrapper.MONTH_TYPE_THIS;
        if (DateUtils.isCheckedDay(dateBean.getDate())) {
            Log.d("EventCalendarAdapter", "drawCheckedDay:" + DateUtils.formatDate(dateBean.getDate()));
            if (DateUtils.isSameDay(dateBean.getDate(), DateUtils.getNow())) {
                viewHolder.setBackgroundResource(R.id.tx_date, R.drawable.calendar_item_today_bg);
                viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, R.color.calendar_text_color_white));
            } else {
                viewHolder.setBackgroundResource(R.id.tx_date, R.drawable.calendar_item_checked_bg);
                viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, R.color.calendar_text_color));
            }
        } else {
            viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, isCurrentMonth ? R.color.calendar_text_color : R.color.calendar_text_color_disable));
            viewHolder.setBackgroundColor(R.id.tx_date, ContextCompat.getColor(this, android.R.color.transparent));
        }
        if ((dateBean.getDayOfWeek() == 2 || dateBean.getDayOfWeek() == 5) && isCurrentMonth) {
            viewHolder.setVisibility(R.id.imv_point, VISIBLE);
        } else {
            viewHolder.setVisibility(R.id.imv_point, GONE);
        }
    }

3.其他功能
设置周月模式calendar.setCalendarMode(isChecked);
跳转到制定日期calendar.jump2Day(DateUtils.getNow());

效果

高仿小米日历_第1张图片
效果图

你可能感兴趣的:(高仿小米日历)