为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > Android 日历方式显示的日期选择组件

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

2018-04-28 33页 doc 80KB 17阅读

用户头像

is_477730

暂无简介

举报
Android 日历方式显示的日期选择组件Android 日历方式显示的日期选择组件 此Widget组件只包含五个类文件: • DateWidget • DateWidgetDayCell • DateWidgetDayHeader • DayStyle • SymbolButton *红色为启动的activity DateWidget.java: Java代码 1. package com.iaiai; 2. 3. import java.text.SimpleDateFormat; 4. import java.util.ArrayLis...
Android 日历方式显示的日期选择组件
Android 日历方式显示的日期选择组件 此Widget组件只包含五个类文件: • DateWidget • DateWidgetDayCell • DateWidgetDayHeader • DayStyle • SymbolButton *红色为启动的activity DateWidget.java: Java代码 1. package com.iaiai; 2. 3. import java.text.SimpleDateFormat; 4. import java.util.ArrayList; 5. import java.util.Calendar; 6. 7. import android.app.Activity; 8. import android.os.Bundle; 9. import android.view.Gravity; 10. import android.view.View; 11. import android.widget.Button; 12. import android.widget.LinearLayout; 13. import android.widget.LinearLayout.LayoutParams; 14. import android.widget.TextView; 15. 37. public class DateWidget extends Activity { 38. private ArrayList days = new ArrayList(); 39. // private SimpleDateFormat dateMonth = new SimpleDateFormat("MMMM yyyy"); 40. private Calendar calStartDate = Calendar.getInstance(); 41. private Calendar calToday = Calendar.getInstance(); 42. private Calendar calCalendar = Calendar.getInstance(); 43. private Calendar calSelected = Calendar.getInstance(); 44. LinearLayout layContent = null; 45. Button btnPrev = null; 46. Button btnToday = null; 47. Button btnNext = null; 48. private int iFirstDayOfWeek = Calendar.MONDAY; 49. private int iMonthViewCurrentMonth = 0; 50. private int iMonthViewCurrentYear = 0; 51. public static final int SELECT_DATE_REQUEST = 111; 52. private static final int iDayCellSize = 38; 53. private static final int iDayHeaderHeight = 24; 1 54. private static final int iTotalWidth = (iDayCellSize * 7); 55. private TextView tv; 56. private int mYear; 57. private int mMonth; 58. private int mDay; 59. 60. @Override 61. public void onCreate(Bundle icicle) { 62. super.onCreate(icicle); 63. iFirstDayOfWeek = Calendar.MONDAY; 64. mYear = calSelected.get(Calendar.YEAR); 65. mMonth = calSelected.get(Calendar.MONTH); 66. mDay = calSelected.get(Calendar.DAY_OF_MONTH); 67. setContentView(generateContentView()); 68. calStartDate = getCalendarStartDate(); 69. DateWidgetDayCell daySelected = updateCalendar(); 70. updateControlsState(); 71. if (daySelected != null) 72. daySelected.requestFocus(); 73. } 74. 75. @Override 76. public void onStart() { 77. super.onStart(); 78. 79. } 80. 81. private LinearLayout createLayout(int iOrientation) { 82. LinearLayout lay = new LinearLayout(this); 83. lay.setLayoutParams(new LayoutParams( 84. android.view.ViewGroup.LayoutParams.FILL_PARENT, 85. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 86. lay.setOrientation(iOrientation); 87. return lay; 88. } 89. 90. private Button createButton(String sText, int iWidth, int iHeight) { 91. Button btn = new Button(this); 92. btn.setText(sText); 93. btn.setLayoutParams(new LayoutParams(iWidth, iHeight)); 94. return btn; 95. } 96. 97. private void generateTopButtons(LinearLayout layTopControls) { 2 98. final int iHorPadding = 24; 99. final int iSmallButtonWidth = 60; 100. btnToday = createButton("", iTotalWidth - iSmallButtonWidth 101. - iSmallButtonWidth, 102. android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 103. btnToday.setPadding(iHorPadding, btnToday.getPaddingTop(), iHorPadding, 104. btnToday.getPaddingBottom()); 105. btnToday.setBackgroundResource(android.R.drawable.btn_default_small); 106. 107. SymbolButton btnPrev = new SymbolButton(this, 108. SymbolButton.symbol.arrowLeft); 109. btnPrev.setLayoutParams(new LayoutParams(iSmallButtonWidth, 110. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 111. btnPrev.setBackgroundResource(android.R.drawable.btn_default_small); 112. 113. SymbolButton btnNext = new SymbolButton(this, 114. SymbolButton.symbol.arrowRight); 115. btnNext.setLayoutParams(new LayoutParams(iSmallButtonWidth, 116. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 117. btnNext.setBackgroundResource(android.R.drawable.btn_default_small); 118. 119. // set events 120. btnPrev.setOnClickListener(new Button.OnClickListener() { 121. public void onClick(View arg0) { 122. setPrevViewItem(); 123. } 124. }); 125. btnToday.setOnClickListener(new Button.OnClickListener() { 126. public void onClick(View arg0) { 127. 128. setTodayViewItem(); 129. String s = calToday.get(Calendar.YEAR) + "/" 130. + (calToday.get(Calendar.MONTH) + 1); 131. btnToday.setText(s); 132. } 133. }); 134. btnNext.setOnClickListener(new Button.OnClickListener() { 135. public void onClick(View arg0) { 136. setNextViewItem(); 137. } 138. }); 139. 140. layTopControls.setGravity(Gravity.CENTER_HORIZONTAL); 141. layTopControls.addView(btnPrev); 3 142. layTopControls.addView(btnToday); 143. layTopControls.addView(btnNext); 144. } 145. 146. private View generateContentView() { 147. LinearLayout layMain = createLayout(LinearLayout.VERTICAL); 148. layMain.setPadding(8, 8, 8, 8); 149. LinearLayout layTopControls = createLayout(LinearLayout.HORIZONTAL); 150. 151. layContent = createLayout(LinearLayout.VERTICAL); 152. layContent.setPadding(20, 0, 20, 0); 153. generateTopButtons(layTopControls); 154. generateCalendar(layContent); 155. layMain.addView(layTopControls); 156. layMain.addView(layContent); 157. 158. tv = new TextView(this); 159. layMain.addView(tv); 160. return layMain; 161. } 162. 163. private View generateCalendarRow() { 164. LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); 165. for (int iDay = 0; iDay < 7; iDay++) { 166. DateWidgetDayCell dayCell = new DateWidgetDayCell(this, 167. iDayCellSize, iDayCellSize); 168. dayCell.setItemClick(mOnDayCellClick); 169. days.add(dayCell); 170. layRow.addView(dayCell); 171. } 172. return layRow; 173. } 174. 175. private View generateCalendarHeader() { 176. LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); 177. for (int iDay = 0; iDay < 7; iDay++) { 178. DateWidgetDayHeader day = new DateWidgetDayHeader(this, 179. iDayCellSize, iDayHeaderHeight); 180. final int iWeekDay = DayStyle.getWeekDay(iDay, iFirstDayOfWeek); 181. day.setData(iWeekDay); 182. layRow.addView(day); 183. } 184. return layRow; 185. } 4 186. 187. private void generateCalendar(LinearLayout layContent) { 188. layContent.addView(generateCalendarHeader()); 189. days.clear(); 190. for (int iRow = 0; iRow < 6; iRow++) { 191. layContent.addView(generateCalendarRow()); 192. } 193. } 194. 195. private Calendar getCalendarStartDate() { 196. calToday.setTimeInMillis(System.currentTimeMillis()); 197. calToday.setFirstDayOfWeek(iFirstDayOfWeek); 198. 199. if (calSelected.getTimeInMillis() == 0) { 200. calStartDate.setTimeInMillis(System.currentTimeMillis()); 201. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); 202. } else { 203. calStartDate.setTimeInMillis(calSelected.getTimeInMillis()); 204. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); 205. } 206. 207. UpdateStartDateForMonth(); 208. 209. return calStartDate; 210. } 211. 212. private DateWidgetDayCell updateCalendar() { 213. DateWidgetDayCell daySelected = null; 214. boolean bSelected = false; 215. final boolean bIsSelection = (calSelected.getTimeInMillis() != 0); 216. final int iSelectedYear = calSelected.get(Calendar.YEAR); 217. final int iSelectedMonth = calSelected.get(Calendar.MONTH); 218. final int iSelectedDay = calSelected.get(Calendar.DAY_OF_MONTH); 219. calCalendar.setTimeInMillis(calStartDate.getTimeInMillis()); 220. for (int i = 0; i < days.size(); i++) { 221. final int iYear = calCalendar.get(Calendar.YEAR); 222. final int iMonth = calCalendar.get(Calendar.MONTH); 223. final int iDay = calCalendar.get(Calendar.DAY_OF_MONTH); 224. final int iDayOfWeek = calCalendar.get(Calendar.DAY_OF_WEEK); 225. DateWidgetDayCell dayCell = days.get(i); 226. // check today 227. boolean bToday = false; 228. if (calToday.get(Calendar.YEAR) == iYear) 229. if (calToday.get(Calendar.MONTH) == iMonth) 5 230. if (calToday.get(Calendar.DAY_OF_MONTH) == iDay) 231. bToday = true; 232. // check holiday 233. boolean bHoliday = false; 234. if ((iDayOfWeek == Calendar.SATURDAY) 235. || (iDayOfWeek == Calendar.SUNDAY)) 236. bHoliday = true; 237. if ((iMonth == Calendar.JANUARY) && (iDay == 1)) 238. bHoliday = true; 239. 240. dayCell.setData(iYear, iMonth, iDay, bToday, bHoliday, 241. iMonthViewCurrentMonth); 242. bSelected = false; 243. if (bIsSelection) 244. if ((iSelectedDay == iDay) && (iSelectedMonth == iMonth) 245. && (iSelectedYear == iYear)) { 246. bSelected = true; 247. } 248. dayCell.setSelected(bSelected); 249. if (bSelected) 250. daySelected = dayCell; 251. calCalendar.add(Calendar.DAY_OF_MONTH, 1); 252. } 253. layContent.invalidate(); 254. return daySelected; 255. } 256. 257. private void UpdateStartDateForMonth() { 258. iMonthViewCurrentMonth = calStartDate.get(Calendar.MONTH); 259. iMonthViewCurrentYear = calStartDate.get(Calendar.YEAR); 260. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 261. UpdateCurrentMonthDisplay(); 262. // update days for week 263. int iDay = 0; 264. int iStartDay = iFirstDayOfWeek; 265. if (iStartDay == Calendar.MONDAY) { 266. iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY; 267. if (iDay < 0) 268. iDay = 6; 269. } 270. if (iStartDay == Calendar.SUNDAY) { 271. iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY; 272. if (iDay < 0) 273. iDay = 6; 6 274. } 275. calStartDate.add(Calendar.DAY_OF_WEEK, -iDay); 276. } 277. 278. private void UpdateCurrentMonthDisplay() { 279. String s = calCalendar.get(Calendar.YEAR) + "/" 280. + (calCalendar.get(Calendar.MONTH) + 1);// dateMonth.format(calCalendar.getTime()); 281. btnToday.setText(s); 282. mYear = calCalendar.get(Calendar.YEAR); 283. } 284. 285. private void setPrevViewItem() { 286. iMonthViewCurrentMonth--; 287. if (iMonthViewCurrentMonth == -1) { 288. iMonthViewCurrentMonth = 11; 289. iMonthViewCurrentYear--; 290. } 291. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 292. calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); 293. calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); 294. UpdateStartDateForMonth(); 295. updateCalendar(); 296. 297. } 298. 299. private void setTodayViewItem() { 300. calToday.setTimeInMillis(System.currentTimeMillis()); 301. calToday.setFirstDayOfWeek(iFirstDayOfWeek); 302. calStartDate.setTimeInMillis(calToday.getTimeInMillis()); 303. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); 304. UpdateStartDateForMonth(); 305. updateCalendar(); 306. } 307. 308. private void setNextViewItem() { 309. iMonthViewCurrentMonth++; 310. if (iMonthViewCurrentMonth == 12) { 311. iMonthViewCurrentMonth = 0; 312. iMonthViewCurrentYear++; 313. } 314. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 315. calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); 316. calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); 7 317. UpdateStartDateForMonth(); 318. updateCalendar(); 319. 320. } 321. 322. private DateWidgetDayCell.OnItemClick mOnDayCellClick = new DateWidgetDayCell.OnItemClick() { 323. public void OnClick(DateWidgetDayCell item) { 324. calSelected.setTimeInMillis(item.getDate().getTimeInMillis()); 325. item.setSelected(true); 326. updateCalendar(); 327. updateControlsState(); 328. } 329. }; 330. 331. private void updateControlsState() { 332. SimpleDateFormat dateFull = new SimpleDateFormat("d MMMM yyyy"); 333. mYear = calSelected.get(Calendar.YEAR); 334. mMonth = calSelected.get(Calendar.MONTH); 335. mDay = calSelected.get(Calendar.DAY_OF_MONTH); 336. tv.setText(new StringBuilder().append(mYear).append("/") 337. .append(format(mMonth + 1)).append("/").append(format(mDay)) 338. .append("-----").append(dateFull.format(calSelected.getTime()))); 339. } 340. 341. private String format(int x) { 342. String s = "" + x; 343. if (s.length() == 1) 344. s = "0" + s; 345. return s; 346. } 347. 348. } DateWidgetDayCell.java: Java代码 1. package com.iaiai; 2. 3. import java.util.Calendar; 4. 5. import android.content.Context; 6. import android.graphics.Canvas; 7. import android.graphics.LinearGradient; 8. import android.graphics.Paint; 8 9. import android.graphics.Rect; 10. import android.graphics.RectF; 11. import android.graphics.Shader; 12. import android.view.KeyEvent; 13. import android.view.MotionEvent; 14. import android.view.View; 15. import android.view.animation.AlphaAnimation; 16. import android.widget.LinearLayout.LayoutParams; 17. 39. public class DateWidgetDayCell extends View { 40. // types 41. public interface OnItemClick { 42. public void OnClick(DateWidgetDayCell item); 43. } 44. 45. public static int ANIM_ALPHA_DURATION = 100; 46. // fields 47. private final static float fTextSize = 22; 48. private final static int iMargin = 1; 49. private final static int iAlphaInactiveMonth = 0x88; 50. 51. // fields 52. private int iDateYear = 0; 53. private int iDateMonth = 0; 54. private int iDateDay = 0; 55. 56. // fields 57. private OnItemClick itemClick = null; 58. private Paint pt = new Paint(); 59. private RectF rect = new RectF(); 60. private String sDate = ""; 61. 62. // fields 63. private boolean bSelected = false; 64. private boolean bIsActiveMonth = false; 65. private boolean bToday = false; 66. private boolean bHoliday = false; 67. private boolean bTouchedDown = false; 68. 69. // methods 70. public DateWidgetDayCell(Context context, int iWidth, int iHeight) { 71. super(context); 72. setFocusable(true); 73. setLayoutParams(new LayoutParams(iWidth, iHeight)); 9 74. } 75. 76. public boolean getSelected() { 77. return this.bSelected; 78. } 79. 80. @Override 81. public void setSelected(boolean bEnable) { 82. if (this.bSelected != bEnable) { 83. this.bSelected = bEnable; 84. this.invalidate(); 85. } 86. } 87. 88. public void setData(int iYear, int iMonth, int iDay, boolean bToday, 89. boolean bHoliday, int iActiveMonth) { 90. iDateYear = iYear; 91. iDateMonth = iMonth; 92. iDateDay = iDay; 93. 94. this.sDate = Integer.toString(iDateDay); 95. this.bIsActiveMonth = (iDateMonth == iActiveMonth); 96. this.bToday = bToday; 97. this.bHoliday = bHoliday; 98. } 99. 100. public void setItemClick(OnItemClick itemClick) { 101. this.itemClick = itemClick; 102. } 103. 104. private int getTextHeight() { 105. return (int) (-pt.ascent() + pt.descent()); 106. } 107. 108. @Override 109. public boolean onKeyDown(int keyCode, KeyEvent event) { 110. boolean bResult = super.onKeyDown(keyCode, event); 111. if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) 112. || (keyCode == KeyEvent.KEYCODE_ENTER)) { 113. doItemClick(); 114. } 115. return bResult; 116. } 117. 10 118. @Override 119. public boolean onKeyUp(int keyCode, KeyEvent event) { 120. boolean bResult = super.onKeyUp(keyCode, event); 121. return bResult; 122. } 123. 124. public void doItemClick() { 125. if (itemClick != null) 126. itemClick.OnClick(this); 127. } 128. 129. @Override 130. protected void onFocusChanged(boolean gainFocus, int direction, 131. Rect previouslyFocusedRect) { 132. super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); 133. invalidate(); 134. } 135. 136. public Calendar getDate() { 137. Calendar calDate = Calendar.getInstance(); 138. calDate.clear(); 139. calDate.set(Calendar.YEAR, iDateYear); 140. calDate.set(Calendar.MONTH, iDateMonth); 141. calDate.set(Calendar.DAY_OF_MONTH, iDateDay); 142. return calDate; 143. } 144. 145. @Override 146. protected void onDraw(Canvas canvas) { 147. super.onDraw(canvas); 148. 149. // init rectangles 150. rect.set(0, 0, this.getWidth(), this.getHeight()); 151. rect.inset(1, 1); 152. 153. // drawing 154. final boolean bFocused = IsViewFocused(); 155. 156. drawDayView(canvas, bFocused); 157. drawDayNumber(canvas, bFocused); 158. } 159. 160. private void drawDayView(Canvas canvas, boolean bFocused) { 161. if (bSelected || bFocused) { 11 162. LinearGradient lGradBkg = null; 163. 164. if (bFocused) { 165. lGradBkg = new LinearGradient(rect.left, 0, rect.right, 0, 166. DayStyle.iColorBkgFocusDark, 167. DayStyle.iColorBkgFocusLight, Shader.TileMode.CLAMP); 168. } 169. 170. if (bSelected) { 171. lGradBkg = new LinearGradient(rect.left, 0, rect.right, 0, 172. DayStyle.iColorBkgSelectedDark, 173. DayStyle.iColorBkgSelectedLight, Shader.TileMode.CLAMP); 174. } 175. 176. if (lGradBkg != null) { 177. pt.setShader(lGradBkg); 178. canvas.drawRect(rect, pt); 179. } 180. 181. pt.setShader(null); 182. 183. } else { 184. 185. pt.setColor(DayStyle.getColorBkg(bHoliday, bToday)); 186. if (!bIsActiveMonth) 187. pt.setAlpha(iAlphaInactiveMonth); 188. canvas.drawRect(rect, pt); 189. } 190. } 191. 192. public void drawDayNumber(Canvas canvas, boolean bFocused) { 193. // draw day number 194. pt.setTypeface(null); 195. pt.setAntiAlias(true); 196. pt.setShader(null); 197. pt.setFakeBoldText(true); 198. pt.setTextSize(fTextSize); 199. 200. pt.setUnderlineText(false); 201. if (bToday) 202. pt.setUnderlineText(true); 203. 204. int iTextPosX = (int) rect.right - (int) pt.measureText(sDate); 205. int iTextPosY = (int) rect.bottom + (int) (-pt.ascent()) 12 206. - getTextHeight(); 207. 208. iTextPosX -= ((int) rect.width() >> 1) 209. - ((int) pt.measureText(sDate) >> 1); 210. iTextPosY -= ((int) rect.height() >> 1) - (getTextHeight() >> 1); 211. 212. // draw text 213. if (bSelected || bFocused) { 214. if (bSelected) 215. pt.setColor(DayStyle.iColorTextSelected); 216. if (bFocused) 217. pt.setColor(DayStyle.iColorTextFocused); 218. } else { 219. pt.setColor(DayStyle.getColorText(bHoliday, bToday)); 220. } 221. 222. if (!bIsActiveMonth) 223. pt.setAlpha(iAlphaInactiveMonth); 224. 225. canvas.drawText(sDate, iTextPosX, iTextPosY + iMargin, pt); 226. 227. pt.setUnderlineText(false); 228. } 229. 230. public boolean IsViewFocused() { 231. return (this.isFocused() || bTouchedDown); 232. } 233. 234. @Override 235. public boolean onTouchEvent(MotionEvent event) { 236. boolean bHandled = false; 237. if (event.getAction() == MotionEvent.ACTION_DOWN) { 238. bHandled = true; 239. bTouchedDown = true; 240. invalidate(); 241. startAlphaAnimIn(DateWidgetDayCell.this); 242. } 243. if (event.getAction() == MotionEvent.ACTION_CANCEL) { 244. bHandled = true; 245. bTouchedDown = false; 246. invalidate(); 247. } 248. if (event.getAction() == MotionEvent.ACTION_UP) { 249. bHandled = true; 13 250. bTouchedDown = false; 251. invalidate(); 252. doItemClick(); 253. } 254. return bHandled; 255. } 256. 257. public static void startAlphaAnimIn(View view) { 258. AlphaAnimation anim = new AlphaAnimation(0.5F, 1); 259. anim.setDuration(ANIM_ALPHA_DURATION); 260. anim.startNow(); 261. view.startAnimation(anim); 262. } 263. 264. } DateWidgetDayHeader.java: Java代码 1. package com.iaiai; 2. 3. import java.util.Calendar; 4. 5. import android.content.Context; 6. import android.graphics.Canvas; 7. import android.graphics.Paint; 8. import android.graphics.RectF; 9. import android.view.View; 10. import android.widget.LinearLayout.LayoutParams; 11. 33. public class DateWidgetDayHeader extends View { 34. // fields 35. private final static int iDayHeaderFontSize = 12; 36. 37. // fields 38. private Paint pt = new Paint(); 39. private RectF rect = new RectF(); 40. private int iWeekDay = -1; 41. private boolean bHoliday = false; 42. 43. // methods 44. public DateWidgetDayHeader(Context context, int iWidth, int iHeight) { 45. super(context); 46. setLayoutParams(new LayoutParams(iWidth, iHeight)); 47. } 14 48. 49. public void setData(int iWeekDay) { 50. this.iWeekDay = iWeekDay; 51. this.bHoliday = false; 52. if ((iWeekDay == Calendar.SATURDAY) || (iWeekDay == Calendar.SUNDAY)) 53. this.bHoliday = true; 54. } 55. 56. private void drawDayHeader(Canvas canvas) { 57. if (iWeekDay != -1) { 58. // background 59. pt.setColor(DayStyle.getColorFrameHeader(bHoliday)); 60. canvas.drawRect(rect, pt); 61. 62. // text 63. pt.setTypeface(null); 64. pt.setTextSize(iDayHeaderFontSize); 65. pt.setAntiAlias(true); 66. pt.setFakeBoldText(true); 67. pt.setColor(DayStyle.getColorTextHeader(bHoliday)); 68. 69. final int iTextPosY = getTextHeight(); 70. final String sDayName = DayStyle.getWeekDayName(iWeekDay); 71. 72. // draw day name 73. final int iDayNamePosX = (int) rect.left 74. + ((int) rect.width() >> 1) 75. - ((int) pt.measureText(sDayName) >> 1); 76. canvas.drawText(sDayName, iDayNamePosX, rect.top + iTextPosY + 2, 77. pt); 78. } 79. } 80. 81. private int getTextHeight() { 82. return (int) (-pt.ascent() + pt.descent()); 83. } 84. 85. @Override 86. protected void onDraw(Canvas canvas) { 87. super.onDraw(canvas); 88. 89. // init rectangles 90. rect.set(0, 0, this.getWidth(), this.getHeight()); 91. rect.inset(1, 1); 15 92. 93. // drawing 94. drawDayHeader(canvas); 95. } 96. 97. } DayStyle.java: Java代码 26. public class DayStyle { 27. // methods 28. 29. private static String[] getWeekDayNames() { 30. String[] vec = new String[10]; 31. // vec[Calendar.SUNDAY] = "Sun"; 32. // vec[Calendar.MONDAY] = "Mon"; 33. // vec[Calendar.TUESDAY] = "Tue"; 34. // vec[Calendar.WEDNESDAY] = "Wed"; 35. // vec[Calendar.THURSDAY] = "Thu"; 36. // vec[Calendar.FRIDAY] = "Fri"; 37. // vec[Calendar.SATURDAY] = "Sat"; 38. 39. vec[Calendar.SUNDAY] = "日"; 40. vec[Calendar.MONDAY] = "月"; 41. vec[Calendar.TUESDAY] = "火"; 42. vec[Calendar.WEDNESDAY] = "水"; 43. vec[Calendar.THURSDAY] = "木"; 44. vec[Calendar.FRIDAY] = "金"; 45. vec[Calendar.SATURDAY] = "土"; 46. return vec; 47. } 48. 49. public static String getWeekDayName(int iDay) { 50. return vecStrWeekDayNames[iDay]; 51. } 52. 53. // fields 54. private final static String[] vecStrWeekDayNames = getWeekDayNames(); 55. 56. // fields 57. public final static int iColorFrameHeader = 0xff666666; 58. public final static int iColorFrameHeaderHoliday = 0xff707070; 59. public final static int iColorTextHeader = 0xffcccccc; 60. public final static int iColorTextHeaderHoliday = 0xffd0d0d0; 16 61. 62. public final static int iColorText = 0xffdddddd; 63. public final static int iColorBkg = 0xff888888; 64. public final static int iColorTextHoliday = 0xfff0f0f0; 65. public final static int iColorBkgHoliday = 0xffaaaaaa; 66. 67. public final static int iColorTextToday = 0xff002200; 68. public final static int iColorBkgToday = 0xff88bb88; 69. 70. public final static int iColorTextSelected = 0xff001122; 71. public final static int iColorBkgSelectedLight = 0xffbbddff; 72. public final static int iColorBkgSelectedDark = 0xff225599; 73. 74. public final static int iColorTextFocused = 0xff221100; 75. public final static int iColorBkgFocusLight = 0xffffddbb; 76. public final static int iColorBkgFocusDark = 0xffaa5500; 77. 78. // methods 79. public static int getColorFrameHeader(boolean bHoliday) { 80. if (bHoliday) 81. return iColorFrameHeaderHoliday; 82. return iColorFrameHeader; 83. } 84. 85. public static int getColorTextHeader(boolean bHoliday) { 86. if (bHoliday) 87. return iColorTextHeaderHoliday; 88. return iColorTextHeader; 89. } 90. 91. public static int getColorText(boolean bHoliday, boolean bToday) { 92. if (bToday) 93. return iColorTextToday; 94. if (bHoliday) 95. return iColorTextHoliday; 96. return iColorText; 97. } 98. 99. public static int getColorBkg(boolean bHoliday, boolean bToday) { 100. if (bToday) 101. return iColorBkgToday; 102. if (bHoliday) 103. return iColorBkgHoliday; 104. return iColorBkg; 17 105. } 106. 107. public static int getWeekDay(int index, int iFirstDayOfWeek) { 108. int iWeekDay = -1; 109. 110. if (iFirstDayOfWeek == Calendar.MONDAY) { 111. iWeekDay = index + Calendar.MONDAY; 112. if (iWeekDay > Calendar.SATURDAY) 113. iWeekDay = Calendar.SUNDAY; 114. } 115. 116. if (iFirstDayOfWeek == Calendar.SUNDAY) { 117. iWeekDay = index + Calendar.SUNDAY; 118. } 119. 120. return iWeekDay; 121. } 122. 123. } SymbolButton.java: Java代码 1. package com.iaiai; 2. 3. import android.content.Context; 4. import android.graphics.Canvas; 5. import android.graphics.Paint; 6. import android.graphics.RectF; 7. import android.widget.Button; 8. 30. public class SymbolButton extends Button { 31. // fields 32. private static final int iColor = 0xffaaaaaa; 33. private static final int iColorActive = 0xff442200; 34. 35. // fields 36. public enum symbol { 37. none, arrowLeft, arrowRight 38. }; 39. 40. // fields 41. private Paint pt = new Paint(); 42. private RectF rect = new RectF(); 43. private RectF rectDraw = new RectF(); 18 44. private symbol symbolType = symbol.none; 45. 46. // methods 47. public SymbolButton(Context context, symbol symbolType) { 48. super(context); 49. this.symbolType = symbolType; 50. } 51. 52. @Override 53. public void onDraw(Canvas canvas) { 54. super.onDraw(canvas); 55. 56. pt.setAntiAlias(true); 57. pt.setStrokeCap(Paint.Cap.ROUND); 58. 59. rectDraw.set(0, 0, getWidth(), getHeight()); 60. rectDraw.left += 6; 61. rectDraw.right -= 6; 62. rectDraw.top += 4; 63. rectDraw.bottom -= 8; 64. 65. if (symbolType != symbol.none) { 66. pt.setStrokeWidth(5); 67. 68. pt.setColor(iColor); 69. if (this.isPressed() || this.isFocused()) 70. pt.setColor(iColorActive); 71. 72. drawArrow(canvas); 73. } 74. } 75. 76. private void drawArrow(Canvas canvas) { 77. rect.set(rectDraw); 78. rect.inset(15, 5); 79. canvas.drawLine(rect.left, rect.centerY(), rect.right, rect.centerY(), 80. pt); 81. if (symbolType == symbol.arrowRight) { 82. canvas.drawLine(rect.right, rect.centerY(), rect.right - 6, 83. rect.top, pt); 84. canvas.drawLine(rect.right, rect.centerY(), rect.right - 6, 85. rect.bottom, pt); 86. } 87. if (symbolType == symbol.arrowLeft) { 19 88. canvas.drawLine(rect.left, rect.centerY(), rect.left + 6, rect.top, 89. pt); 90. canvas.drawLine(rect.left, rect.centerY(), rect.left + 6, 91. rect.bottom, pt); 92. } 93. } 94. 95. } 20
/
本文档为【Android 日历方式显示的日期选择组件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索