如何给calendar4.0 日历月视图添加左右滑动的功能

原生日历的月视图只能上下滚动查看不同的月份,但是如果要切换年份的话,必须连续切换12个月才能到达下一年。由于是listview显示数据,因此当我滑动较重的时候,跳转两三年是不成问题的。但是有些用户无论如何都希望能做到左右滑动切换年,向右滑动切换到上一年的该月,向左滑动切换到下一年的该月。

要实现这个功能其实代码量不大,但是前提是你找到了好的方案。

一开始我以为月视图的listView的每一项就是那充满整个屏幕的数字区域,其实每一项对应的是一周。所以现在不能针对每一个元素对应的MonthWeekEventsView做文章。要实现左右切换年,那么应该需要两个ListView相互切换,而现有的listview只有一个,而且还是通过ListFragment得到的。

SimpleDayPickerFragment extends ListFragment

因此我们需要将SimpleDayPickerFragment修改成一般的Fragment,且在布局中加上两个listview,这样一来,在SimpleDayPickerFragment和MonthByWeekFragment中也要做相应的修改。

我觉得ViewSwitcher来完成listView的切换应该不错,应该不错,其实calendar 2.3的月切换就是用的ViewSwitcher,但是当我做出视图效果之后发现性能问题很严重,不管上下滑动还是左右滑动都很卡顿,所以这个方法根本不可行。

ViewSwitcher不行那就用ViewPager吧,这个也很容易想到,结果发现滑动效果很好,但是有一点ViewPager滑动的时候不能一直循环下去,网上有专门解决ViewPager循环左右滑动的文章,但是没有一种解决方案是完美的,都是伪循环,总结了下都几乎是设一个很大的数值,然后将当前View设置成这个值得中间值,无法接受这种做法。

还好我还有第三种方案,那就是ViewGroup。自定义一个能一直左右循环滑动的ViewGroup,然后将两个显示日历的ListView装进去。

待续