`
he91_com
  • 浏览: 375741 次
文章分类
社区版块
存档分类
最新评论

Android 日历方式显示的日期选择组件

 
阅读更多
运行结果:


此Widget组件只包含五个类文件:
  • DateWidget
  • DateWidgetDayCell
  • DateWidgetDayHeader
  • DayStyle
  • SymbolButton

*红色为启动的activity

DateWidget.java:
Java代码 复制代码收藏代码
  1. packagecom.iaiai;
  2. importjava.text.SimpleDateFormat;
  3. importjava.util.ArrayList;
  4. importjava.util.Calendar;
  5. importandroid.app.Activity;
  6. importandroid.os.Bundle;
  7. importandroid.view.Gravity;
  8. importandroid.view.View;
  9. importandroid.widget.Button;
  10. importandroid.widget.LinearLayout;
  11. importandroid.widget.LinearLayout.LayoutParams;
  12. importandroid.widget.TextView;
  13. /**
  14. *
  15. *<p>
  16. *Title:DateWidget.java
  17. *</p>
  18. *<p>
  19. *E-Mail:176291935@qq.com
  20. *</p>
  21. *<p>
  22. *QQ:176291935
  23. *</p>
  24. *<p>
  25. *Http:iaiai.iteye.com
  26. *</p>
  27. *<p>
  28. *Createtime:2011-8-19
  29. *</p>
  30. *
  31. *@author丸子
  32. *@version0.0.1
  33. */
  34. publicclassDateWidgetextendsActivity{
  35. privateArrayList<DateWidgetDayCell>days=newArrayList<DateWidgetDayCell>();
  36. //privateSimpleDateFormatdateMonth=newSimpleDateFormat("MMMMyyyy");
  37. privateCalendarcalStartDate=Calendar.getInstance();
  38. privateCalendarcalToday=Calendar.getInstance();
  39. privateCalendarcalCalendar=Calendar.getInstance();
  40. privateCalendarcalSelected=Calendar.getInstance();
  41. LinearLayoutlayContent=null;
  42. ButtonbtnPrev=null;
  43. ButtonbtnToday=null;
  44. ButtonbtnNext=null;
  45. privateintiFirstDayOfWeek=Calendar.MONDAY;
  46. privateintiMonthViewCurrentMonth=0;
  47. privateintiMonthViewCurrentYear=0;
  48. publicstaticfinalintSELECT_DATE_REQUEST=111;
  49. privatestaticfinalintiDayCellSize=38;
  50. privatestaticfinalintiDayHeaderHeight=24;
  51. privatestaticfinalintiTotalWidth=(iDayCellSize*7);
  52. privateTextViewtv;
  53. privateintmYear;
  54. privateintmMonth;
  55. privateintmDay;
  56. @Override
  57. publicvoidonCreate(Bundleicicle){
  58. super.onCreate(icicle);
  59. iFirstDayOfWeek=Calendar.MONDAY;
  60. mYear=calSelected.get(Calendar.YEAR);
  61. mMonth=calSelected.get(Calendar.MONTH);
  62. mDay=calSelected.get(Calendar.DAY_OF_MONTH);
  63. setContentView(generateContentView());
  64. calStartDate=getCalendarStartDate();
  65. DateWidgetDayCelldaySelected=updateCalendar();
  66. updateControlsState();
  67. if(daySelected!=null)
  68. daySelected.requestFocus();
  69. }
  70. @Override
  71. publicvoidonStart(){
  72. super.onStart();
  73. }
  74. privateLinearLayoutcreateLayout(intiOrientation){
  75. LinearLayoutlay=newLinearLayout(this);
  76. lay.setLayoutParams(newLayoutParams(
  77. android.view.ViewGroup.LayoutParams.FILL_PARENT,
  78. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
  79. lay.setOrientation(iOrientation);
  80. returnlay;
  81. }
  82. privateButtoncreateButton(StringsText,intiWidth,intiHeight){
  83. Buttonbtn=newButton(this);
  84. btn.setText(sText);
  85. btn.setLayoutParams(newLayoutParams(iWidth,iHeight));
  86. returnbtn;
  87. }
  88. privatevoidgenerateTopButtons(LinearLayoutlayTopControls){
  89. finalintiHorPadding=24;
  90. finalintiSmallButtonWidth=60;
  91. btnToday=createButton("",iTotalWidth-iSmallButtonWidth
  92. -iSmallButtonWidth,
  93. android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
  94. btnToday.setPadding(iHorPadding,btnToday.getPaddingTop(),iHorPadding,
  95. btnToday.getPaddingBottom());
  96. btnToday.setBackgroundResource(android.R.drawable.btn_default_small);
  97. SymbolButtonbtnPrev=newSymbolButton(this,
  98. SymbolButton.symbol.arrowLeft);
  99. btnPrev.setLayoutParams(newLayoutParams(iSmallButtonWidth,
  100. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
  101. btnPrev.setBackgroundResource(android.R.drawable.btn_default_small);
  102. SymbolButtonbtnNext=newSymbolButton(this,
  103. SymbolButton.symbol.arrowRight);
  104. btnNext.setLayoutParams(newLayoutParams(iSmallButtonWidth,
  105. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
  106. btnNext.setBackgroundResource(android.R.drawable.btn_default_small);
  107. //setevents
  108. btnPrev.setOnClickListener(newButton.OnClickListener(){
  109. publicvoidonClick(Viewarg0){
  110. setPrevViewItem();
  111. }
  112. });
  113. btnToday.setOnClickListener(newButton.OnClickListener(){
  114. publicvoidonClick(Viewarg0){
  115. setTodayViewItem();
  116. Strings=calToday.get(Calendar.YEAR)+"/"
  117. +(calToday.get(Calendar.MONTH)+1);
  118. btnToday.setText(s);
  119. }
  120. });
  121. btnNext.setOnClickListener(newButton.OnClickListener(){
  122. publicvoidonClick(Viewarg0){
  123. setNextViewItem();
  124. }
  125. });
  126. layTopControls.setGravity(Gravity.CENTER_HORIZONTAL);
  127. layTopControls.addView(btnPrev);
  128. layTopControls.addView(btnToday);
  129. layTopControls.addView(btnNext);
  130. }
  131. privateViewgenerateContentView(){
  132. LinearLayoutlayMain=createLayout(LinearLayout.VERTICAL);
  133. layMain.setPadding(8,8,8,8);
  134. LinearLayoutlayTopControls=createLayout(LinearLayout.HORIZONTAL);
  135. layContent=createLayout(LinearLayout.VERTICAL);
  136. layContent.setPadding(20,0,20,0);
  137. generateTopButtons(layTopControls);
  138. generateCalendar(layContent);
  139. layMain.addView(layTopControls);
  140. layMain.addView(layContent);
  141. tv=newTextView(this);
  142. layMain.addView(tv);
  143. returnlayMain;
  144. }
  145. privateViewgenerateCalendarRow(){
  146. LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
  147. for(intiDay=0;iDay<7;iDay++){
  148. DateWidgetDayCelldayCell=newDateWidgetDayCell(this,
  149. iDayCellSize,iDayCellSize);
  150. dayCell.setItemClick(mOnDayCellClick);
  151. days.add(dayCell);
  152. layRow.addView(dayCell);
  153. }
  154. returnlayRow;
  155. }
  156. privateViewgenerateCalendarHeader(){
  157. LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
  158. for(intiDay=0;iDay<7;iDay++){
  159. DateWidgetDayHeaderday=newDateWidgetDayHeader(this,
  160. iDayCellSize,iDayHeaderHeight);
  161. finalintiWeekDay=DayStyle.getWeekDay(iDay,iFirstDayOfWeek);
  162. day.setData(iWeekDay);
  163. layRow.addView(day);
  164. }
  165. returnlayRow;
  166. }
  167. privatevoidgenerateCalendar(LinearLayoutlayContent){
  168. layContent.addView(generateCalendarHeader());
  169. days.clear();
  170. for(intiRow=0;iRow<6;iRow++){
  171. layContent.addView(generateCalendarRow());
  172. }
  173. }
  174. privateCalendargetCalendarStartDate(){
  175. calToday.setTimeInMillis(System.currentTimeMillis());
  176. calToday.setFirstDayOfWeek(iFirstDayOfWeek);
  177. if(calSelected.getTimeInMillis()==0){
  178. calStartDate.setTimeInMillis(System.currentTimeMillis());
  179. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
  180. }else{
  181. calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
  182. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
  183. }
  184. UpdateStartDateForMonth();
  185. returncalStartDate;
  186. }
  187. privateDateWidgetDayCellupdateCalendar(){
  188. DateWidgetDayCelldaySelected=null;
  189. booleanbSelected=false;
  190. finalbooleanbIsSelection=(calSelected.getTimeInMillis()!=0);
  191. finalintiSelectedYear=calSelected.get(Calendar.YEAR);
  192. finalintiSelectedMonth=calSelected.get(Calendar.MONTH);
  193. finalintiSelectedDay=calSelected.get(Calendar.DAY_OF_MONTH);
  194. calCalendar.setTimeInMillis(calStartDate.getTimeInMillis());
  195. for(inti=0;i<days.size();i++){
  196. finalintiYear=calCalendar.get(Calendar.YEAR);
  197. finalintiMonth=calCalendar.get(Calendar.MONTH);
  198. finalintiDay=calCalendar.get(Calendar.DAY_OF_MONTH);
  199. finalintiDayOfWeek=calCalendar.get(Calendar.DAY_OF_WEEK);
  200. DateWidgetDayCelldayCell=days.get(i);
  201. //checktoday
  202. booleanbToday=false;
  203. if(calToday.get(Calendar.YEAR)==iYear)
  204. if(calToday.get(Calendar.MONTH)==iMonth)
  205. if(calToday.get(Calendar.DAY_OF_MONTH)==iDay)
  206. bToday=true;
  207. //checkholiday
  208. booleanbHoliday=false;
  209. if((iDayOfWeek==Calendar.SATURDAY)
  210. ||(iDayOfWeek==Calendar.SUNDAY))
  211. bHoliday=true;
  212. if((iMonth==Calendar.JANUARY)&&(iDay==1))
  213. bHoliday=true;
  214. dayCell.setData(iYear,iMonth,iDay,bToday,bHoliday,
  215. iMonthViewCurrentMonth);
  216. bSelected=false;
  217. if(bIsSelection)
  218. if((iSelectedDay==iDay)&&(iSelectedMonth==iMonth)
  219. &&(iSelectedYear==iYear)){
  220. bSelected=true;
  221. }
  222. dayCell.setSelected(bSelected);
  223. if(bSelected)
  224. daySelected=dayCell;
  225. calCalendar.add(Calendar.DAY_OF_MONTH,1);
  226. }
  227. layContent.invalidate();
  228. returndaySelected;
  229. }
  230. privatevoidUpdateStartDateForMonth(){
  231. iMonthViewCurrentMonth=calStartDate.get(Calendar.MONTH);
  232. iMonthViewCurrentYear=calStartDate.get(Calendar.YEAR);
  233. calStartDate.set(Calendar.DAY_OF_MONTH,1);
  234. UpdateCurrentMonthDisplay();
  235. //updatedaysforweek
  236. intiDay=0;
  237. intiStartDay=iFirstDayOfWeek;
  238. if(iStartDay==Calendar.MONDAY){
  239. iDay=calStartDate.get(Calendar.DAY_OF_WEEK)-Calendar.MONDAY;
  240. if(iDay<0)
  241. iDay=6;
  242. }
  243. if(iStartDay==Calendar.SUNDAY){
  244. iDay=calStartDate.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY;
  245. if(iDay<0)
  246. iDay=6;
  247. }
  248. calStartDate.add(Calendar.DAY_OF_WEEK,-iDay);
  249. }
  250. privatevoidUpdateCurrentMonthDisplay(){
  251. Strings=calCalendar.get(Calendar.YEAR)+"/"
  252. +(calCalendar.get(Calendar.MONTH)+1);//dateMonth.format(calCalendar.getTime());
  253. btnToday.setText(s);
  254. mYear=calCalendar.get(Calendar.YEAR);
  255. }
  256. privatevoidsetPrevViewItem(){
  257. iMonthViewCurrentMonth--;
  258. if(iMonthViewCurrentMonth==-1){
  259. iMonthViewCurrentMonth=11;
  260. iMonthViewCurrentYear--;
  261. }
  262. calStartDate.set(Calendar.DAY_OF_MONTH,1);
  263. calStartDate.set(Calendar.MONTH,iMonthViewCurrentMonth);
  264. calStartDate.set(Calendar.YEAR,iMonthViewCurrentYear);
  265. UpdateStartDateForMonth();
  266. updateCalendar();
  267. }
  268. privatevoidsetTodayViewItem(){
  269. calToday.setTimeInMillis(System.currentTimeMillis());
  270. calToday.setFirstDayOfWeek(iFirstDayOfWeek);
  271. calStartDate.setTimeInMillis(calToday.getTimeInMillis());
  272. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
  273. UpdateStartDateForMonth();
  274. updateCalendar();
  275. }
  276. privatevoidsetNextViewItem(){
  277. iMonthViewCurrentMonth++;
  278. if(iMonthViewCurrentMonth==12){
  279. iMonthViewCurrentMonth=0;
  280. iMonthViewCurrentYear++;
  281. }
  282. calStartDate.set(Calendar.DAY_OF_MONTH,1);
  283. calStartDate.set(Calendar.MONTH,iMonthViewCurrentMonth);
  284. calStartDate.set(Calendar.YEAR,iMonthViewCurrentYear);
  285. UpdateStartDateForMonth();
  286. updateCalendar();
  287. }
  288. privateDateWidgetDayCell.OnItemClickmOnDayCellClick=newDateWidgetDayCell.OnItemClick(){
  289. publicvoidOnClick(DateWidgetDayCellitem){
  290. calSelected.setTimeInMillis(item.getDate().getTimeInMillis());
  291. item.setSelected(true);
  292. updateCalendar();
  293. updateControlsState();
  294. }
  295. };
  296. privatevoidupdateControlsState(){
  297. SimpleDateFormatdateFull=newSimpleDateFormat("dMMMMyyyy");
  298. mYear=calSelected.get(Calendar.YEAR);
  299. mMonth=calSelected.get(Calendar.MONTH);
  300. mDay=calSelected.get(Calendar.DAY_OF_MONTH);
  301. tv.setText(newStringBuilder().append(mYear).append("/")
  302. .append(format(mMonth+1)).append("/").append(format(mDay))
  303. .append("-----").append(dateFull.format(calSelected.getTime())));
  304. }
  305. privateStringformat(intx){
  306. Strings=""+x;
  307. if(s.length()==1)
  308. s="0"+s;
  309. returns;
  310. }
  311. }


DateWidgetDayCell.java:
Java代码 复制代码收藏代码
  1. packagecom.iaiai;
  2. importjava.util.Calendar;
  3. importandroid.content.Context;
  4. importandroid.graphics.Canvas;
  5. importandroid.graphics.LinearGradient;
  6. importandroid.graphics.Paint;
  7. importandroid.graphics.Rect;
  8. importandroid.graphics.RectF;
  9. importandroid.graphics.Shader;
  10. importandroid.view.KeyEvent;
  11. importandroid.view.MotionEvent;
  12. importandroid.view.View;
  13. importandroid.view.animation.AlphaAnimation;
  14. importandroid.widget.LinearLayout.LayoutParams;
  15. /**
  16. *
  17. *<p>
  18. *Title:DateWidgetDayCell.java
  19. *</p>
  20. *<p>
  21. *E-Mail:176291935@qq.com
  22. *</p>
  23. *<p>
  24. *QQ:176291935
  25. *</p>
  26. *<p>
  27. *Http:iaiai.iteye.com
  28. *</p>
  29. *<p>
  30. *Createtime:2011-8-19
  31. *</p>
  32. *
  33. *@author丸子
  34. *@version0.0.1
  35. */
  36. publicclassDateWidgetDayCellextendsView{
  37. //types
  38. publicinterfaceOnItemClick{
  39. publicvoidOnClick(DateWidgetDayCellitem);
  40. }
  41. publicstaticintANIM_ALPHA_DURATION=100;
  42. //fields
  43. privatefinalstaticfloatfTextSize=22;
  44. privatefinalstaticintiMargin=1;
  45. privatefinalstaticintiAlphaInactiveMonth=0x88;
  46. //fields
  47. privateintiDateYear=0;
  48. privateintiDateMonth=0;
  49. privateintiDateDay=0;
  50. //fields
  51. privateOnItemClickitemClick=null;
  52. privatePaintpt=newPaint();
  53. privateRectFrect=newRectF();
  54. privateStringsDate="";
  55. //fields
  56. privatebooleanbSelected=false;
  57. privatebooleanbIsActiveMonth=false;
  58. privatebooleanbToday=false;
  59. privatebooleanbHoliday=false;
  60. privatebooleanbTouchedDown=false;
  61. //methods
  62. publicDateWidgetDayCell(Contextcontext,intiWidth,intiHeight){
  63. super(context);
  64. setFocusable(true);
  65. setLayoutParams(newLayoutParams(iWidth,iHeight));
  66. }
  67. publicbooleangetSelected(){
  68. returnthis.bSelected;
  69. }
  70. @Override
  71. publicvoidsetSelected(booleanbEnable){
  72. if(this.bSelected!=bEnable){
  73. this.bSelected=bEnable;
  74. this.invalidate();
  75. }
  76. }
  77. publicvoidsetData(intiYear,intiMonth,intiDay,booleanbToday,
  78. booleanbHoliday,intiActiveMonth){
  79. iDateYear=iYear;
  80. iDateMonth=iMonth;
  81. iDateDay=iDay;
  82. this.sDate=Integer.toString(iDateDay);
  83. this.bIsActiveMonth=(iDateMonth==iActiveMonth);
  84. this.bToday=bToday;
  85. this.bHoliday=bHoliday;
  86. }
  87. publicvoidsetItemClick(OnItemClickitemClick){
  88. this.itemClick=itemClick;
  89. }
  90. privateintgetTextHeight(){
  91. return(int)(-pt.ascent()+pt.descent());
  92. }
  93. @Override
  94. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  95. booleanbResult=super.onKeyDown(keyCode,event);
  96. if((keyCode==KeyEvent.KEYCODE_DPAD_CENTER)
  97. ||(keyCode==KeyEvent.KEYCODE_ENTER)){
  98. doItemClick();
  99. }
  100. returnbResult;
  101. }
  102. @Override
  103. publicbooleanonKeyUp(intkeyCode,KeyEventevent){
  104. booleanbResult=super.onKeyUp(keyCode,event);
  105. returnbResult;
  106. }
  107. publicvoiddoItemClick(){
  108. if(itemClick!=null)
  109. itemClick.OnClick(this);
  110. }
  111. @Override
  112. protectedvoidonFocusChanged(booleangainFocus,intdirection,
  113. RectpreviouslyFocusedRect){
  114. super.onFocusChanged(gainFocus,direction,previouslyFocusedRect);
  115. invalidate();
  116. }
  117. publicCalendargetDate(){
  118. CalendarcalDate=Calendar.getInstance();
  119. calDate.clear();
  120. calDate.set(Calendar.YEAR,iDateYear);
  121. calDate.set(Calendar.MONTH,iDateMonth);
  122. calDate.set(Calendar.DAY_OF_MONTH,iDateDay);
  123. returncalDate;
  124. }
  125. @Override
  126. protectedvoidonDraw(Canvascanvas){
  127. super.onDraw(canvas);
  128. //initrectangles
  129. rect.set(0,0,this.getWidth(),this.getHeight());
  130. rect.inset(1,1);
  131. //drawing
  132. finalbooleanbFocused=IsViewFocused();
  133. drawDayView(canvas,bFocused);
  134. drawDayNumber(canvas,bFocused);
  135. }
  136. privatevoiddrawDayView(Canvascanvas,booleanbFocused){
  137. if(bSelected||bFocused){
  138. LinearGradientlGradBkg=null;
  139. if(bFocused){
  140. lGradBkg=newLinearGradient(rect.left,0,rect.right,0,
  141. DayStyle.iColorBkgFocusDark,
  142. DayStyle.iColorBkgFocusLight,Shader.TileMode.CLAMP);
  143. }
  144. if(bSelected){
  145. lGradBkg=newLinearGradient(rect.left,0,rect.right,0,
  146. DayStyle.iColorBkgSelectedDark,
  147. DayStyle.iColorBkgSelectedLight,Shader.TileMode.CLAMP);
  148. }
  149. if(lGradBkg!=null){
  150. pt.setShader(lGradBkg);
  151. canvas.drawRect(rect,pt);
  152. }
  153. pt.setShader(null);
  154. }else{
  155. pt.setColor(DayStyle.getColorBkg(bHoliday,bToday));
  156. if(!bIsActiveMonth)
  157. pt.setAlpha(iAlphaInactiveMonth);
  158. canvas.drawRect(rect,pt);
  159. }
  160. }
  161. publicvoiddrawDayNumber(Canvascanvas,booleanbFocused){
  162. //drawdaynumber
  163. pt.setTypeface(null);
  164. pt.setAntiAlias(true);
  165. pt.setShader(null);
  166. pt.setFakeBoldText(true);
  167. pt.setTextSize(fTextSize);
  168. pt.setUnderlineText(false);
  169. if(bToday)
  170. pt.setUnderlineText(true);
  171. intiTextPosX=(int)rect.right-(int)pt.measureText(sDate);
  172. intiTextPosY=(int)rect.bottom+(int)(-pt.ascent())
  173. -getTextHeight();
  174. iTextPosX-=((int)rect.width()>>1)
  175. -((int)pt.measureText(sDate)>>1);
  176. iTextPosY-=((int)rect.height()>>1)-(getTextHeight()>>1);
  177. //drawtext
  178. if(bSelected||bFocused){
  179. if(bSelected)
  180. pt.setColor(DayStyle.iColorTextSelected);
  181. if(bFocused)
  182. pt.setColor(DayStyle.iColorTextFocused);
  183. }else{
  184. pt.setColor(DayStyle.getColorText(bHoliday,bToday));
  185. }
  186. if(!bIsActiveMonth)
  187. pt.setAlpha(iAlphaInactiveMonth);
  188. canvas.drawText(sDate,iTextPosX,iTextPosY+iMargin,pt);
  189. pt.setUnderlineText(false);
  190. }
  191. publicbooleanIsViewFocused(){
  192. return(this.isFocused()||bTouchedDown);
  193. }
  194. @Override
  195. publicbooleanonTouchEvent(MotionEventevent){
  196. booleanbHandled=false;
  197. if(event.getAction()==MotionEvent.ACTION_DOWN){
  198. bHandled=true;
  199. bTouchedDown=true;
  200. invalidate();
  201. startAlphaAnimIn(DateWidgetDayCell.this);
  202. }
  203. if(event.getAction()==MotionEvent.ACTION_CANCEL){
  204. bHandled=true;
  205. bTouchedDown=false;
  206. invalidate();
  207. }
  208. if(event.getAction()==MotionEvent.ACTION_UP){
  209. bHandled=true;
  210. bTouchedDown=false;
  211. invalidate();
  212. doItemClick();
  213. }
  214. returnbHandled;
  215. }
  216. publicstaticvoidstartAlphaAnimIn(Viewview){
  217. AlphaAnimationanim=newAlphaAnimation(0.5F,1);
  218. anim.setDuration(ANIM_ALPHA_DURATION);
  219. anim.startNow();
  220. view.startAnimation(anim);
  221. }
  222. }


DateWidgetDayHeader.java:
Java代码 复制代码收藏代码
  1. packagecom.iaiai;
  2. importjava.util.Calendar;
  3. importandroid.content.Context;
  4. importandroid.graphics.Canvas;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.RectF;
  7. importandroid.view.View;
  8. importandroid.widget.LinearLayout.LayoutParams;
  9. /**
  10. *
  11. *<p>
  12. *Title:DateWidgetDayHeader.java
  13. *</p>
  14. *<p>
  15. *E-Mail:176291935@qq.com
  16. *</p>
  17. *<p>
  18. *QQ:176291935
  19. *</p>
  20. *<p>
  21. *Http:iaiai.iteye.com
  22. *</p>
  23. *<p>
  24. *Createtime:2011-8-19
  25. *</p>
  26. *
  27. *@author丸子
  28. *@version0.0.1
  29. */
  30. publicclassDateWidgetDayHeaderextendsView{
  31. //fields
  32. privatefinalstaticintiDayHeaderFontSize=12;
  33. //fields
  34. privatePaintpt=newPaint();
  35. privateRectFrect=newRectF();
  36. privateintiWeekDay=-1;
  37. privatebooleanbHoliday=false;
  38. //methods
  39. publicDateWidgetDayHeader(Contextcontext,intiWidth,intiHeight){
  40. super(context);
  41. setLayoutParams(newLayoutParams(iWidth,iHeight));
  42. }
  43. publicvoidsetData(intiWeekDay){
  44. this.iWeekDay=iWeekDay;
  45. this.bHoliday=false;
  46. if((iWeekDay==Calendar.SATURDAY)||(iWeekDay==Calendar.SUNDAY))
  47. this.bHoliday=true;
  48. }
  49. privatevoiddrawDayHeader(Canvascanvas){
  50. if(iWeekDay!=-1){
  51. //background
  52. pt.setColor(DayStyle.getColorFrameHeader(bHoliday));
  53. canvas.drawRect(rect,pt);
  54. //text
  55. pt.setTypeface(null);
  56. pt.setTextSize(iDayHeaderFontSize);
  57. pt.setAntiAlias(true);
  58. pt.setFakeBoldText(true);
  59. pt.setColor(DayStyle.getColorTextHeader(bHoliday));
  60. finalintiTextPosY=getTextHeight();
  61. finalStringsDayName=DayStyle.getWeekDayName(iWeekDay);
  62. //drawdayname
  63. finalintiDayNamePosX=(int)rect.left
  64. +((int)rect.width()>>1)
  65. -((int)pt.measureText(sDayName)>>1);
  66. canvas.drawText(sDayName,iDayNamePosX,rect.top+iTextPosY+2,
  67. pt);
  68. }
  69. }
  70. privateintgetTextHeight(){
  71. return(int)(-pt.ascent()+pt.descent());
  72. }
  73. @Override
  74. protectedvoidonDraw(Canvascanvas){
  75. super.onDraw(canvas);
  76. //initrectangles
  77. rect.set(0,0,this.getWidth(),this.getHeight());
  78. rect.inset(1,1);
  79. //drawing
  80. drawDayHeader(canvas);
  81. }
  82. }


DayStyle.java:
Java代码 复制代码收藏代码
  1. packagecom.iaiai;
  2. importjava.util.Calendar;
  3. /**
  4. *
  5. *<p>
  6. *Title:DayStyle.java
  7. *</p>
  8. *<p>
  9. *E-Mail:176291935@qq.com
  10. *</p>
  11. *<p>
  12. *QQ:176291935
  13. *</p>
  14. *<p>
  15. *Http:iaiai.iteye.com
  16. *</p>
  17. *<p>
  18. *Createtime:2011-8-19
  19. *</p>
  20. *
  21. *@author丸子
  22. *@version0.0.1
  23. */
  24. publicclassDayStyle{
  25. //methods
  26. privatestaticString[]getWeekDayNames(){
  27. String[]vec=newString[10];
  28. //vec[Calendar.SUNDAY]="Sun";
  29. //vec[Calendar.MONDAY]="Mon";
  30. //vec[Calendar.TUESDAY]="Tue";
  31. //vec[Calendar.WEDNESDAY]="Wed";
  32. //vec[Calendar.THURSDAY]="Thu";
  33. //vec[Calendar.FRIDAY]="Fri";
  34. //vec[Calendar.SATURDAY]="Sat";
  35. vec[Calendar.SUNDAY]="日";
  36. vec[Calendar.MONDAY]="月";
  37. vec[Calendar.TUESDAY]="火";
  38. vec[Calendar.WEDNESDAY]="水";
  39. vec[Calendar.THURSDAY]="木";
  40. vec[Calendar.FRIDAY]="金";
  41. vec[Calendar.SATURDAY]="土";
  42. returnvec;
  43. }
  44. publicstaticStringgetWeekDayName(intiDay){
  45. returnvecStrWeekDayNames[iDay];
  46. }
  47. //fields
  48. privatefinalstaticString[]vecStrWeekDayNames=getWeekDayNames();
  49. //fields
  50. publicfinalstaticintiColorFrameHeader=0xff666666;
  51. publicfinalstaticintiColorFrameHeaderHoliday=0xff707070;
  52. publicfinalstaticintiColorTextHeader=0xffcccccc;
  53. publicfinalstaticintiColorTextHeaderHoliday=0xffd0d0d0;
  54. publicfinalstaticintiColorText=0xffdddddd;
  55. publicfinalstaticintiColorBkg=0xff888888;
  56. publicfinalstaticintiColorTextHoliday=0xfff0f0f0;
  57. publicfinalstaticintiColorBkgHoliday=0xffaaaaaa;
  58. publicfinalstaticintiColorTextToday=0xff002200;
  59. publicfinalstaticintiColorBkgToday=0xff88bb88;
  60. publicfinalstaticintiColorTextSelected=0xff001122;
  61. publicfinalstaticintiColorBkgSelectedLight=0xffbbddff;
  62. publicfinalstaticintiColorBkgSelectedDark=0xff225599;
  63. publicfinalstaticintiColorTextFocused=0xff221100;
  64. publicfinalstaticintiColorBkgFocusLight=0xffffddbb;
  65. publicfinalstaticintiColorBkgFocusDark=0xffaa5500;
  66. //methods
  67. publicstaticintgetColorFrameHeader(booleanbHoliday){
  68. if(bHoliday)
  69. returniColorFrameHeaderHoliday;
  70. returniColorFrameHeader;
  71. }
  72. publicstaticintgetColorTextHeader(booleanbHoliday){
  73. if(bHoliday)
  74. returniColorTextHeaderHoliday;
  75. returniColorTextHeader;
  76. }
  77. publicstaticintgetColorText(booleanbHoliday,booleanbToday){
  78. if(bToday)
  79. returniColorTextToday;
  80. if(bHoliday)
  81. returniColorTextHoliday;
  82. returniColorText;
  83. }
  84. publicstaticintgetColorBkg(booleanbHoliday,booleanbToday){
  85. if(bToday)
  86. returniColorBkgToday;
  87. if(bHoliday)
  88. returniColorBkgHoliday;
  89. returniColorBkg;
  90. }
  91. publicstaticintgetWeekDay(intindex,intiFirstDayOfWeek){
  92. intiWeekDay=-1;
  93. if(iFirstDayOfWeek==Calendar.MONDAY){
  94. iWeekDay=index+Calendar.MONDAY;
  95. if(iWeekDay>Calendar.SATURDAY)
  96. iWeekDay=Calendar.SUNDAY;
  97. }
  98. if(iFirstDayOfWeek==Calendar.SUNDAY){
  99. iWeekDay=index+Calendar.SUNDAY;
  100. }
  101. returniWeekDay;
  102. }
  103. }


SymbolButton.java:
Java代码 复制代码收藏代码
  1. packagecom.iaiai;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Paint;
  5. importandroid.graphics.RectF;
  6. importandroid.widget.Button;
  7. /**
  8. *
  9. *<p>
  10. *Title:SymbolButton.java
  11. *</p>
  12. *<p>
  13. *E-Mail:176291935@qq.com
  14. *</p>
  15. *<p>
  16. *QQ:176291935
  17. *</p>
  18. *<p>
  19. *Http:iaiai.iteye.com
  20. *</p>
  21. *<p>
  22. *Createtime:2011-8-19
  23. *</p>
  24. *
  25. *@author丸子
  26. *@version0.0.1
  27. */
  28. publicclassSymbolButtonextendsButton{
  29. //fields
  30. privatestaticfinalintiColor=0xffaaaaaa;
  31. privatestaticfinalintiColorActive=0xff442200;
  32. //fields
  33. publicenumsymbol{
  34. none,arrowLeft,arrowRight
  35. };
  36. //fields
  37. privatePaintpt=newPaint();
  38. privateRectFrect=newRectF();
  39. privateRectFrectDraw=newRectF();
  40. privatesymbolsymbolType=symbol.none;
  41. //methods
  42. publicSymbolButton(Contextcontext,symbolsymbolType){
  43. super(context);
  44. this.symbolType=symbolType;
  45. }
  46. @Override
  47. publicvoidonDraw(Canvascanvas){
  48. super.onDraw(canvas);
  49. pt.setAntiAlias(true);
  50. pt.setStrokeCap(Paint.Cap.ROUND);
  51. rectDraw.set(0,0,getWidth(),getHeight());
  52. rectDraw.left+=6;
  53. rectDraw.right-=6;
  54. rectDraw.top+=4;
  55. rectDraw.bottom-=8;
  56. if(symbolType!=symbol.none){
  57. pt.setStrokeWidth(5);
  58. pt.setColor(iColor);
  59. if(this.isPressed()||this.isFocused())
  60. pt.setColor(iColorActive);
  61. drawArrow(canvas);
  62. }
  63. }
  64. privatevoiddrawArrow(Canvascanvas){
  65. rect.set(rectDraw);
  66. rect.inset(15,5);
  67. canvas.drawLine(rect.left,rect.centerY(),rect.right,rect.centerY(),
  68. pt);
  69. if(symbolType==symbol.arrowRight){
  70. canvas.drawLine(rect.right,rect.centerY(),rect.right-6,
  71. rect.top,pt);
  72. canvas.drawLine(rect.right,rect.centerY(),rect.right-6,
  73. rect.bottom,pt);
  74. }
  75. if(symbolType==symbol.arrowLeft){
  76. canvas.drawLine(rect.left,rect.centerY(),rect.left+6,rect.top,
  77. pt);
  78. canvas.drawLine(rect.left,rect.centerY(),rect.left+6,
  79. rect.bottom,pt);
  80. }
  81. }
  82. }
  • 大小: 31.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics