Android一款可定制的日历控件

继上文我们继续撸代码,本文与高德地图扯不上关系,只是我项目中用到的,希望分享出来给各位使用,对此不感兴趣的可以直接跳过看我的下一篇文章。

最终效果图1:选择日历选择日期,其中有下标的日期是有数据的,点击显示当天地图上的数据
这里写图片描述

效果图2: 生成marker并显示详情
这里写图片描述

由于不能上传2M以上的截图,只录了重点,废话不多讲,速度上车。

传送门:https://github.com/957919019/SuperCalendar

·可指定日期显示不同的日期风格。
·滑动切换
·快速定位今日日期

使用方法:

<com.ldf.calendar.view.MonthPager
            android:id="@+id/mp_pager"
            android:layout_width="match_parent"
            android:layout_height="270dp"
            android:background="#fff"/>

类中的代码初始化:

// 设置高度
mp_pager.setViewheight(Utils.dpi2px(mActivity, 270));

// 设置监听
        onSelectDateListener = new OnSelectDateListener()
        {
            @Override
            public void onSelectDate(CalendarDate date)
            {
                refreshClickDate(date);
                if (!markData.contains(date.toString()))
                {
                    Toast.makeText(mActivity, "这一天很安静,什么也没发生!", Toast.LENGTH_SHORT).show(); // 判断该天是否有Date,如果有则实现自己的方法,如果没有,提示
                }
            }

            @Override
            public void onSelectOtherMonth(int offset)
            {
                //偏移量 -1表示刷新成上一个月数据 , 1表示刷新成下一个月数据
                mp_pager.selectOtherMonth(offset);
            }
        };

	// 初始化日历控件,将自定义布局传入
        CustomDayView customDayView = new CustomDayView(mActivity, R.layout.custom_day);
        calendarAdapter = new CalendarViewAdapter(
                mActivity,
                onSelectDateListener, // 监听
                CalendarAttr.CalendayType.MONTH, // 日期
                customDayView);

        markData = new ArrayList<>(); // 指定有Date的日期
        markData.add("2017-12-7");
        markData.add("2017-12-8");
        markData.add("2017-12-9");
        markData.add("2017-12-10");
        markData.add("2017-12-14");
        calendarAdapter.setMarkData(markData); // 添加至指定日期

        mp_pager.setAdapter(calendarAdapter);
        mp_pager.setCurrentItem(MonthPager.CURRENT_DAY_INDEX);

        mp_pager.setPageTransformer(false, new ViewPager.PageTransformer()
        {
            @Override
            public void transformPage(View page, float position)
            {
                position = (float) Math.sqrt(1 - Math.abs(position));
                page.setAlpha(position);
            }
        });
        mp_pager.addOnPageChangeListener(new MonthPager.OnPageChangeListener()
        { // 滑动监听
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {
            }

            @Override
            public void onPageSelected(int position)
            {
                mCurrentPage = position;
                currentCalendars = calendarAdapter.getPagers();
                if (currentCalendars.get(position % currentCalendars.size()) instanceof Calendar)
                {
                    CalendarDate date = currentCalendars.get(position % currentCalendars.size()).getSeedDate();
                    currentDate = date;
                    tv_year.setText(date.getYear() + "年");
                    tv_mouth.setText(date.getMonth() + "");
                }
            }

            @Override
            public void onPageScrollStateChanged(int state)
            {
            }
        });
    }

    private void refreshClickDate(CalendarDate date)
    {
        currentDate = date;
        tv_year.setText(date.getYear() + "年");
        tv_mouth.setText(date.getMonth() + "");
    }

    private void refreshMonthPager() // 刷新
    {
        CalendarDate today = new CalendarDate();
        calendarAdapter.notifyDataChanged(today);
        tv_year.setText(today.getYear() + "年");
        tv_mouth.setText(today.getMonth() + "");
    }

ok到此为止,就这几句代码,就完成了日历控件。在下一篇中继续讲高德地图实现效果图的过程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值