高仿小米日历

高仿小米日历

https://github.com/wuda615/StickyCalendar

[TOC]

使用方式

导入

Gradle

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

xml添加布局

<com.github.wuda615.calendar.widget.ClpsCalendarWrapperLayout
    android:id="@+id/calendar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:calendarItemId="@layout/item_calendar_demo"
    app:contentId="@+id/lv_bottom">
    <ListView
        android:id="@+id/lv_bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none" />
</com.github.wuda615.calendar.widget.ClpsCalendarWrapperLayout>
  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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/calendar_item"
    android:layout_width="wrap_content"
    android:layout_height="50dp">
    <TextView
        android:id="@+id/tx_date"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_centerInParent="true"
        android:layout_gravity="center_horizontal"
        android:button="@null"
        android:gravity="center"
        android:textColor="@color/calendar_text_color"
        android:textSize="15sp"
        tools:background="@drawable/calendar_orange_solid"
        tools:text="18" />
    <ImageView
        android:id="@+id/imv_point"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="center_horizontal"
        android:layout_margin="5dp"
        android:src="@drawable/calendar_marker_green" />
</RelativeLayout>

包含一个用来显示日期的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());

效果

效果图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一款仿miui,仿小米,日历,周日历,月日历,月视图、周视图滑动切换,农历,Andriod Calendar , ...
    慕涵盛华阅读 5,812评论 0 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,092评论 25 709
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 47,045评论 22 665
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,868评论 0 17
  • 常言道:"大理风光在苍洱 ,苍洱风光在双廊",然而双廊的发展可以说是醉梦生死,曲拆轮回,才打造了这个美誉。双廊发展...
    风尘一抺情阅读 4,334评论 0 1

友情链接更多精彩内容