Android 4.0日历(calendar)源码分析之月视图

泡在网上的日子 / 文 发表于2013-03-05 23:07 次阅读 日历,android,calendar

1.日期跳转问题:

这个问题是在处理点击today按钮之后,新建日程的日期不是当天,而是当月的1号这个故障时发现的。

 

对于总是所在月的1号,这个很好处理,因为google原生就是这样设计的。只需在SimpleDayPickerFragment.java文件中将goto()函数的

mFirstDayOfMonth.set(mTempTime);  
   
mFirstDayOfMonth.monthDay = 1;  
   
millis = mFirstDayOfMonth.normalize(true);  
   
         if(isFirst==true){  
   
             isFirst=false;  
   
    setMonthDisplayed(mSelectedDay, true);  
   
         }else{  
   
             setMonthDisplayed(mFirstDayOfMonth, true);  
   
         }

 

大概是在450行左右

改成:

mFirstDayOfMonth.set(mSelectedDay);  
   
mFirstDayOfMonth.monthDay = mSelectedDay.monthDay;  
   
millis = mFirstDayOfMonth.normalize(true);  
   
setMonthDisplayed(mSelectedDay, true);

 

 

这样改完之后,不会出现跳转之后总是跳转日期所在月的1号这样的问题了。

 

但是,会出现有时候跳转后的日期与我们期望的不一致(比如我点击的是today按钮,那么跳转后的日期应该是今天,如果我是在菜单里选着跳转的某一日期,那么跳转后的日期应该是我选择的这个日期)。开始以为是日期的问题,即我给出的跳转日期是错误的,然而在跟踪代码之后发现,只有当跳转过程中出现动画效果的时候才会出现这个情况。

 

于是我将      goto函数的      

if (animate) {  
    
                mListView.smoothScrollToPositionFromTop(  
    
                         position, LIST_TOP_OFFSET, GOTO_SCROLL_DURATION);  
    
                            onScrollStateChanged(mListView, OnScrollListener.SCROLL_STATE_IDLE);  
    
               return true;  
    
            }

 

 

这段代码去掉,发现正常了。

 

看来是在需要动画的情况下所执行的代码导致的。

 

至于为什么需要动画,好像是根据日期来判断的,判断的语句很奇怪,根本看不出需要动画的理由啊(经过思考,当离所要跳转的日期较远的时候,则没有动画效果,因为这样用户会等很久,而比较近,则慢慢滑动到目标日期,反正比较近,也花不了多长时间)。

 

在MonthByWeekFragment中

boolean animate = true;  
   
if (mDaysPerWeek * mNumWeeks * 2 < Math.abs(  
   
        Time.getJulianDay(event.selectedTime.toMillis(true), event.selectedTime.gmtoff)  
   
        - Time.getJulianDay(mFirstVisibleDay.toMillis(true), mFirstVisibleDay.gmtoff)  
   
        - mDaysPerWeek * mNumWeeks / 2)) {  
   
    animate = false;  
   
}

 

 

而且为什么执行了动画为真条件下的代码之后跳转日期就会出现问题,也还没去研究

收藏 赞 (1) 踩 (4)
上一篇:android之自定义ViewGroup实现自动换行布局
viewgroup简单说就是可以装view的view. ViewGroup其实是一个视图容器,而他本身也是一个view,因为他是一个容器,所以很多布局控件都是由继承他才得以实现的,比如LinearLayout,FrameLayout等布局。 如果我们需要一个苛刻的布局,比如能根据子view的宽度自
下一篇:Android中自定义View时MeasureSpec的作用
有时,Android系统控件无法满足我们的需求,因此有必要自定义View。具体方法参见官方开发文档: http://developer.android.com/guide/topics/ui/custom-components.html 一般来说,自定义控件都会去重写View的onMeasure方法,因为该方法指定该控件在屏幕上的