Android中的自定义日历视图

Android中的自定义日历视图,第1张

概述我正在为我的 Android应用程序构建一个自定义日历视图,允许您在几个月之间滑动.我已经创建了自定义日历方块视图,我已将其嵌入到自定义日历月视图中,并且所有内容都在1个月的范围内完美运行. 不幸的是,现在我被卡住了.我现在想要将我的自定义日历月视图嵌入到无限视图寻呼机中,以便我可以无限期地向前和向后滚动日历. 我已经尝试通过使用简单的技巧来调整this horizontal pager以进行无限 我正在为我的 Android应用程序构建一个自定义日历视图,允许您在几个月之间滑动.我已经创建了自定义日历方块视图,我已将其嵌入到自定义日历月视图中,并且所有内容都在1个月的范围内完美运行.

不幸的是,现在我被卡住了.我现在想要将我的自定义日历月视图嵌入到无限视图寻呼机中,以便我可以无限期地向前和向后滚动日历.

我已经尝试通过使用简单的技巧来调整this horizontal pager以进行无限滚动.我保存了一个包含3个日历月视图的数组,并根据用户滚动到的位置更新列表.例…

> [7月,8月,9月](重点是8月,然后用户刷到9月)
> [7月,9月](焦点现在是9月)
> [8月,9月](8月离开1,覆盖7月)
> [8月,9月,9月](9月离开1,覆盖8月)
> [8月,9月](将视图设置为9月中旬,所以我们再次居中)
> [8月,10月](将在9月2日覆盖实际下个月)

但是,当我这样做时,在刷到下个月时屏幕上会有明显的闪光.

这是向前滚动的代码(注意:向后滚动具有相同的问题)

private voID updateVIEwsForForwardScroll() {    // Note: INDEX_PREV = 0; INDEX_CURR = 1; INDEX_NEXT = 2    ((CalendarMonthVIEw) getChildAt(INDEX_PREV)).showMonth(oneMonthPriorTo(currentMonth));    ((CalendarMonthVIEw) getChildAt(INDEX_CURR)).showMonth(currentMonth);    setCurrentScreen(INDEX_CURR,false);    ((CalendarMonthVIEw) getChildAt(INDEX_NEXT)).showMonth(oneMonthAfter(currentMonth));}

我认为问题是setCurrentScreen()在showMonth(currentMonth)之前完成,因此INDEX_CURR中的视图在设置屏幕时仍然在更新.我尝试使用以下策略来解决这个问题……

> [7月,9月](删除7月,但将其存放回收)
> [8月,10月](7月回收显示10月,并添加视图)

我根本没有触及目前关注的视图,但仍然有一个闪光!这一次,屏幕从9月到8月闪烁,然后又回到9月.

那么我做错了什么?如果没有用户知道,有没有办法做我想做的事情?如果没有,我可以利用现有的课程吗?

(作为一个附带问题,有没有什么方法可以直观地自定义AndroID CalendarVIEw?这真的可以解决我所有的问题…)

提前致谢!

解决方法 我最终通过扩展FragmentStatePagerAdapter以及整合user113215的建议来实现它.我没有真正无限滚动,而是几乎无限(即10,000个月,或833年).这是我的大部分代码:

public static class Calendaradapter extends FragmentStatePagerAdapter {    private static final int NUM_MONTHS = 10000;    private static final int INDEX_EPOCH = NUM_MONTHS/2;    private static final int MONTHS_PER_YEAR = 12;    private static final Calendar calendarMonthEpoch = new GregorianCalendar(2012,Calendar.AUGUST,1);    // ...    @OverrIDe    public int getCount() {        return NUM_MONTHS;    }    @OverrIDe    public Fragment getItem(int position) {        return CalendarMonthFragment.newInstance(calendarMonthAtposition(position));    }    private static Calendar calendarMonthAtposition(int position) {        int offset = position - INDEX_EPOCH;        Calendar calMonthAtposition = (Calendar) calendarMonthEpoch.clone();         calMonthAtposition.add(Calendar.MONTH,offset % MONTHS_PER_YEAR);        calMonthAtposition.add(Calendar.YEAR,offset / MONTHS_PER_YEAR);        return calMonthAtposition;    }    // ...}
总结

以上是内存溢出为你收集整理的Android中的自定义日历视图全部内容,希望文章能够帮你解决Android中的自定义日历视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存