Android 日历方式显示的日期选择组件.doc
收藏
编号:41881828
类型:共享资源
大小:67.50KB
格式:DOC
上传时间:2020-01-17
上传人:xxj14****4609
认证信息
个人认证
肖**(实名认证)
河南
IP属地:河南
20
积分
- 关 键 词:
-
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;
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) {
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);
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. }
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)
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;
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);
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;
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));
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.
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) {
162. LinearGradient lGradBkg = null;
163.
164. i
- 内容简介:
-
-
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。