继上文我们继续撸代码,本文与高德地图扯不上关系,只是我项目中用到的,希望分享出来给各位使用,对此不感兴趣的可以直接跳过看我的下一篇文章。
最终效果图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到此为止,就这几句代码,就完成了日历控件。在下一篇中继续讲高德地图实现效果图的过程。