- 浏览: 411004 次
-
文章分类
最新评论
-
tedeum:
美帝人民不为钱写代码是因为万恶的资本主义社会保障制度
读《20个月赚130亿》有感 -
novembersky:
还好你没相信那个大饼
谁坑了程序员的职业道德?送给初入职的码农,和宣传奴性的领导。 -
禀圣含华:
也不要着急进一家公司,就因为那公司急着招人。。急着招人背后又是 ...
谁坑了程序员的职业道德?送给初入职的码农,和宣传奴性的领导。 -
haohao-xuexi02:
每个码奴辛辛苦苦最后,还不能干脆的走。。各种被坑。。。
找工作 ...
谁坑了程序员的职业道德?送给初入职的码农,和宣传奴性的领导。 -
hot002:
BuN_Ny 写道真实项目中的6种人:1.怂恿者2.批评者3. ...
一个优秀创业团队需要的6种人
Android 日历方式显示的日期选择组件
运行结果:

此Widget组件只包含五个类文件:
*红色为启动的activity
DateWidget.java:
DateWidgetDayCell.java:
DateWidgetDayHeader.java:
DayStyle.java:
SymbolButton.java:

此Widget组件只包含五个类文件:
- DateWidget
- DateWidgetDayCell
- DateWidgetDayHeader
- DayStyle
- SymbolButton
*红色为启动的activity
DateWidget.java:
- packagecom.iaiai;
- importjava.text.SimpleDateFormat;
- importjava.util.ArrayList;
- importjava.util.Calendar;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Gravity;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.LinearLayout;
- importandroid.widget.LinearLayout.LayoutParams;
- importandroid.widget.TextView;
- /**
- *
- *<p>
- *Title:DateWidget.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-19
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- publicclassDateWidgetextendsActivity{
- privateArrayList<DateWidgetDayCell>days=newArrayList<DateWidgetDayCell>();
- //privateSimpleDateFormatdateMonth=newSimpleDateFormat("MMMMyyyy");
- privateCalendarcalStartDate=Calendar.getInstance();
- privateCalendarcalToday=Calendar.getInstance();
- privateCalendarcalCalendar=Calendar.getInstance();
- privateCalendarcalSelected=Calendar.getInstance();
- LinearLayoutlayContent=null;
- ButtonbtnPrev=null;
- ButtonbtnToday=null;
- ButtonbtnNext=null;
- privateintiFirstDayOfWeek=Calendar.MONDAY;
- privateintiMonthViewCurrentMonth=0;
- privateintiMonthViewCurrentYear=0;
- publicstaticfinalintSELECT_DATE_REQUEST=111;
- privatestaticfinalintiDayCellSize=38;
- privatestaticfinalintiDayHeaderHeight=24;
- privatestaticfinalintiTotalWidth=(iDayCellSize*7);
- privateTextViewtv;
- privateintmYear;
- privateintmMonth;
- privateintmDay;
- @Override
- publicvoidonCreate(Bundleicicle){
- super.onCreate(icicle);
- iFirstDayOfWeek=Calendar.MONDAY;
- mYear=calSelected.get(Calendar.YEAR);
- mMonth=calSelected.get(Calendar.MONTH);
- mDay=calSelected.get(Calendar.DAY_OF_MONTH);
- setContentView(generateContentView());
- calStartDate=getCalendarStartDate();
- DateWidgetDayCelldaySelected=updateCalendar();
- updateControlsState();
- if(daySelected!=null)
- daySelected.requestFocus();
- }
- @Override
- publicvoidonStart(){
- super.onStart();
- }
- privateLinearLayoutcreateLayout(intiOrientation){
- LinearLayoutlay=newLinearLayout(this);
- lay.setLayoutParams(newLayoutParams(
- android.view.ViewGroup.LayoutParams.FILL_PARENT,
- android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
- lay.setOrientation(iOrientation);
- returnlay;
- }
- privateButtoncreateButton(StringsText,intiWidth,intiHeight){
- Buttonbtn=newButton(this);
- btn.setText(sText);
- btn.setLayoutParams(newLayoutParams(iWidth,iHeight));
- returnbtn;
- }
- privatevoidgenerateTopButtons(LinearLayoutlayTopControls){
- finalintiHorPadding=24;
- finalintiSmallButtonWidth=60;
- btnToday=createButton("",iTotalWidth-iSmallButtonWidth
- -iSmallButtonWidth,
- android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
- btnToday.setPadding(iHorPadding,btnToday.getPaddingTop(),iHorPadding,
- btnToday.getPaddingBottom());
- btnToday.setBackgroundResource(android.R.drawable.btn_default_small);
- SymbolButtonbtnPrev=newSymbolButton(this,
- SymbolButton.symbol.arrowLeft);
- btnPrev.setLayoutParams(newLayoutParams(iSmallButtonWidth,
- android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
- btnPrev.setBackgroundResource(android.R.drawable.btn_default_small);
- SymbolButtonbtnNext=newSymbolButton(this,
- SymbolButton.symbol.arrowRight);
- btnNext.setLayoutParams(newLayoutParams(iSmallButtonWidth,
- android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
- btnNext.setBackgroundResource(android.R.drawable.btn_default_small);
- //setevents
- btnPrev.setOnClickListener(newButton.OnClickListener(){
- publicvoidonClick(Viewarg0){
- setPrevViewItem();
- }
- });
- btnToday.setOnClickListener(newButton.OnClickListener(){
- publicvoidonClick(Viewarg0){
- setTodayViewItem();
- Strings=calToday.get(Calendar.YEAR)+"/"
- +(calToday.get(Calendar.MONTH)+1);
- btnToday.setText(s);
- }
- });
- btnNext.setOnClickListener(newButton.OnClickListener(){
- publicvoidonClick(Viewarg0){
- setNextViewItem();
- }
- });
- layTopControls.setGravity(Gravity.CENTER_HORIZONTAL);
- layTopControls.addView(btnPrev);
- layTopControls.addView(btnToday);
- layTopControls.addView(btnNext);
- }
- privateViewgenerateContentView(){
- LinearLayoutlayMain=createLayout(LinearLayout.VERTICAL);
- layMain.setPadding(8,8,8,8);
- LinearLayoutlayTopControls=createLayout(LinearLayout.HORIZONTAL);
- layContent=createLayout(LinearLayout.VERTICAL);
- layContent.setPadding(20,0,20,0);
- generateTopButtons(layTopControls);
- generateCalendar(layContent);
- layMain.addView(layTopControls);
- layMain.addView(layContent);
- tv=newTextView(this);
- layMain.addView(tv);
- returnlayMain;
- }
- privateViewgenerateCalendarRow(){
- LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
- for(intiDay=0;iDay<7;iDay++){
- DateWidgetDayCelldayCell=newDateWidgetDayCell(this,
- iDayCellSize,iDayCellSize);
- dayCell.setItemClick(mOnDayCellClick);
- days.add(dayCell);
- layRow.addView(dayCell);
- }
- returnlayRow;
- }
- privateViewgenerateCalendarHeader(){
- LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
- for(intiDay=0;iDay<7;iDay++){
- DateWidgetDayHeaderday=newDateWidgetDayHeader(this,
- iDayCellSize,iDayHeaderHeight);
- finalintiWeekDay=DayStyle.getWeekDay(iDay,iFirstDayOfWeek);
- day.setData(iWeekDay);
- layRow.addView(day);
- }
- returnlayRow;
- }
- privatevoidgenerateCalendar(LinearLayoutlayContent){
- layContent.addView(generateCalendarHeader());
- days.clear();
- for(intiRow=0;iRow<6;iRow++){
- layContent.addView(generateCalendarRow());
- }
- }
- privateCalendargetCalendarStartDate(){
- calToday.setTimeInMillis(System.currentTimeMillis());
- calToday.setFirstDayOfWeek(iFirstDayOfWeek);
- if(calSelected.getTimeInMillis()==0){
- calStartDate.setTimeInMillis(System.currentTimeMillis());
- calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
- }else{
- calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
- calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
- }
- UpdateStartDateForMonth();
- returncalStartDate;
- }
- privateDateWidgetDayCellupdateCalendar(){
- DateWidgetDayCelldaySelected=null;
- booleanbSelected=false;
- finalbooleanbIsSelection=(calSelected.getTimeInMillis()!=0);
- finalintiSelectedYear=calSelected.get(Calendar.YEAR);
- finalintiSelectedMonth=calSelected.get(Calendar.MONTH);
- finalintiSelectedDay=calSelected.get(Calendar.DAY_OF_MONTH);
- calCalendar.setTimeInMillis(calStartDate.getTimeInMillis());
- for(inti=0;i<days.size();i++){
- finalintiYear=calCalendar.get(Calendar.YEAR);
- finalintiMonth=calCalendar.get(Calendar.MONTH);
- finalintiDay=calCalendar.get(Calendar.DAY_OF_MONTH);
- finalintiDayOfWeek=calCalendar.get(Calendar.DAY_OF_WEEK);
- DateWidgetDayCelldayCell=days.get(i);
- //checktoday
- booleanbToday=false;
- if(calToday.get(Calendar.YEAR)==iYear)
- if(calToday.get(Calendar.MONTH)==iMonth)
- if(calToday.get(Calendar.DAY_OF_MONTH)==iDay)
- bToday=true;
- //checkholiday
- booleanbHoliday=false;
- if((iDayOfWeek==Calendar.SATURDAY)
- ||(iDayOfWeek==Calendar.SUNDAY))
- bHoliday=true;
- if((iMonth==Calendar.JANUARY)&&(iDay==1))
- bHoliday=true;
- dayCell.setData(iYear,iMonth,iDay,bToday,bHoliday,
- iMonthViewCurrentMonth);
- bSelected=false;
- if(bIsSelection)
- if((iSelectedDay==iDay)&&(iSelectedMonth==iMonth)
- &&(iSelectedYear==iYear)){
- bSelected=true;
- }
- dayCell.setSelected(bSelected);
- if(bSelected)
- daySelected=dayCell;
- calCalendar.add(Calendar.DAY_OF_MONTH,1);
- }
- layContent.invalidate();
- returndaySelected;
- }
- privatevoidUpdateStartDateForMonth(){
- iMonthViewCurrentMonth=calStartDate.get(Calendar.MONTH);
- iMonthViewCurrentYear=calStartDate.get(Calendar.YEAR);
- calStartDate.set(Calendar.DAY_OF_MONTH,1);
- UpdateCurrentMonthDisplay();
- //updatedaysforweek
- intiDay=0;
- intiStartDay=iFirstDayOfWeek;
- if(iStartDay==Calendar.MONDAY){
- iDay=calStartDate.get(Calendar.DAY_OF_WEEK)-Calendar.MONDAY;
- if(iDay<0)
- iDay=6;
- }
- if(iStartDay==Calendar.SUNDAY){
- iDay=calStartDate.get(Calendar.DAY_OF_WEEK)-Calendar.SUNDAY;
- if(iDay<0)
- iDay=6;
- }
- calStartDate.add(Calendar.DAY_OF_WEEK,-iDay);
- }
- privatevoidUpdateCurrentMonthDisplay(){
- Strings=calCalendar.get(Calendar.YEAR)+"/"
- +(calCalendar.get(Calendar.MONTH)+1);//dateMonth.format(calCalendar.getTime());
- btnToday.setText(s);
- mYear=calCalendar.get(Calendar.YEAR);
- }
- privatevoidsetPrevViewItem(){
- iMonthViewCurrentMonth--;
- if(iMonthViewCurrentMonth==-1){
- iMonthViewCurrentMonth=11;
- iMonthViewCurrentYear--;
- }
- calStartDate.set(Calendar.DAY_OF_MONTH,1);
- calStartDate.set(Calendar.MONTH,iMonthViewCurrentMonth);
- calStartDate.set(Calendar.YEAR,iMonthViewCurrentYear);
- UpdateStartDateForMonth();
- updateCalendar();
- }
- privatevoidsetTodayViewItem(){
- calToday.setTimeInMillis(System.currentTimeMillis());
- calToday.setFirstDayOfWeek(iFirstDayOfWeek);
- calStartDate.setTimeInMillis(calToday.getTimeInMillis());
- calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
- UpdateStartDateForMonth();
- updateCalendar();
- }
- privatevoidsetNextViewItem(){
- iMonthViewCurrentMonth++;
- if(iMonthViewCurrentMonth==12){
- iMonthViewCurrentMonth=0;
- iMonthViewCurrentYear++;
- }
- calStartDate.set(Calendar.DAY_OF_MONTH,1);
- calStartDate.set(Calendar.MONTH,iMonthViewCurrentMonth);
- calStartDate.set(Calendar.YEAR,iMonthViewCurrentYear);
- UpdateStartDateForMonth();
- updateCalendar();
- }
- privateDateWidgetDayCell.OnItemClickmOnDayCellClick=newDateWidgetDayCell.OnItemClick(){
- publicvoidOnClick(DateWidgetDayCellitem){
- calSelected.setTimeInMillis(item.getDate().getTimeInMillis());
- item.setSelected(true);
- updateCalendar();
- updateControlsState();
- }
- };
- privatevoidupdateControlsState(){
- SimpleDateFormatdateFull=newSimpleDateFormat("dMMMMyyyy");
- mYear=calSelected.get(Calendar.YEAR);
- mMonth=calSelected.get(Calendar.MONTH);
- mDay=calSelected.get(Calendar.DAY_OF_MONTH);
- tv.setText(newStringBuilder().append(mYear).append("/")
- .append(format(mMonth+1)).append("/").append(format(mDay))
- .append("-----").append(dateFull.format(calSelected.getTime())));
- }
- privateStringformat(intx){
- Strings=""+x;
- if(s.length()==1)
- s="0"+s;
- returns;
- }
- }
package com.iaiai; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; /** * * <p> * Title: DateWidget.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-19 * </p> * * @author 丸子 * @version 0.0.1 */ public class DateWidget extends Activity { private ArrayList<DateWidgetDayCell> days = new ArrayList<DateWidgetDayCell>(); // private SimpleDateFormat dateMonth = new SimpleDateFormat("MMMM yyyy"); private Calendar calStartDate = Calendar.getInstance(); private Calendar calToday = Calendar.getInstance(); private Calendar calCalendar = Calendar.getInstance(); private Calendar calSelected = Calendar.getInstance(); LinearLayout layContent = null; Button btnPrev = null; Button btnToday = null; Button btnNext = null; private int iFirstDayOfWeek = Calendar.MONDAY; private int iMonthViewCurrentMonth = 0; private int iMonthViewCurrentYear = 0; public static final int SELECT_DATE_REQUEST = 111; private static final int iDayCellSize = 38; private static final int iDayHeaderHeight = 24; private static final int iTotalWidth = (iDayCellSize * 7); private TextView tv; private int mYear; private int mMonth; private int mDay; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); iFirstDayOfWeek = Calendar.MONDAY; mYear = calSelected.get(Calendar.YEAR); mMonth = calSelected.get(Calendar.MONTH); mDay = calSelected.get(Calendar.DAY_OF_MONTH); setContentView(generateContentView()); calStartDate = getCalendarStartDate(); DateWidgetDayCell daySelected = updateCalendar(); updateControlsState(); if (daySelected != null) daySelected.requestFocus(); } @Override public void onStart() { super.onStart(); } private LinearLayout createLayout(int iOrientation) { LinearLayout lay = new LinearLayout(this); lay.setLayoutParams(new LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); lay.setOrientation(iOrientation); return lay; } private Button createButton(String sText, int iWidth, int iHeight) { Button btn = new Button(this); btn.setText(sText); btn.setLayoutParams(new LayoutParams(iWidth, iHeight)); return btn; } private void generateTopButtons(LinearLayout layTopControls) { final int iHorPadding = 24; final int iSmallButtonWidth = 60; btnToday = createButton("", iTotalWidth - iSmallButtonWidth - iSmallButtonWidth, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); btnToday.setPadding(iHorPadding, btnToday.getPaddingTop(), iHorPadding, btnToday.getPaddingBottom()); btnToday.setBackgroundResource(android.R.drawable.btn_default_small); SymbolButton btnPrev = new SymbolButton(this, SymbolButton.symbol.arrowLeft); btnPrev.setLayoutParams(new LayoutParams(iSmallButtonWidth, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); btnPrev.setBackgroundResource(android.R.drawable.btn_default_small); SymbolButton btnNext = new SymbolButton(this, SymbolButton.symbol.arrowRight); btnNext.setLayoutParams(new LayoutParams(iSmallButtonWidth, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); btnNext.setBackgroundResource(android.R.drawable.btn_default_small); // set events btnPrev.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { setPrevViewItem(); } }); btnToday.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { setTodayViewItem(); String s = calToday.get(Calendar.YEAR) + "/" + (calToday.get(Calendar.MONTH) + 1); btnToday.setText(s); } }); btnNext.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { setNextViewItem(); } }); layTopControls.setGravity(Gravity.CENTER_HORIZONTAL); layTopControls.addView(btnPrev); layTopControls.addView(btnToday); layTopControls.addView(btnNext); } private View generateContentView() { LinearLayout layMain = createLayout(LinearLayout.VERTICAL); layMain.setPadding(8, 8, 8, 8); LinearLayout layTopControls = createLayout(LinearLayout.HORIZONTAL); layContent = createLayout(LinearLayout.VERTICAL); layContent.setPadding(20, 0, 20, 0); generateTopButtons(layTopControls); generateCalendar(layContent); layMain.addView(layTopControls); layMain.addView(layContent); tv = new TextView(this); layMain.addView(tv); return layMain; } private View generateCalendarRow() { LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); for (int iDay = 0; iDay < 7; iDay++) { DateWidgetDayCell dayCell = new DateWidgetDayCell(this, iDayCellSize, iDayCellSize); dayCell.setItemClick(mOnDayCellClick); days.add(dayCell); layRow.addView(dayCell); } return layRow; } private View generateCalendarHeader() { LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); for (int iDay = 0; iDay < 7; iDay++) { DateWidgetDayHeader day = new DateWidgetDayHeader(this, iDayCellSize, iDayHeaderHeight); final int iWeekDay = DayStyle.getWeekDay(iDay, iFirstDayOfWeek); day.setData(iWeekDay); layRow.addView(day); } return layRow; } private void generateCalendar(LinearLayout layContent) { layContent.addView(generateCalendarHeader()); days.clear(); for (int iRow = 0; iRow < 6; iRow++) { layContent.addView(generateCalendarRow()); } } private Calendar getCalendarStartDate() { calToday.setTimeInMillis(System.currentTimeMillis()); calToday.setFirstDayOfWeek(iFirstDayOfWeek); if (calSelected.getTimeInMillis() == 0) { calStartDate.setTimeInMillis(System.currentTimeMillis()); calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); } else { calStartDate.setTimeInMillis(calSelected.getTimeInMillis()); calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); } UpdateStartDateForMonth(); return calStartDate; } private DateWidgetDayCell updateCalendar() { DateWidgetDayCell daySelected = null; boolean bSelected = false; final boolean bIsSelection = (calSelected.getTimeInMillis() != 0); final int iSelectedYear = calSelected.get(Calendar.YEAR); final int iSelectedMonth = calSelected.get(Calendar.MONTH); final int iSelectedDay = calSelected.get(Calendar.DAY_OF_MONTH); calCalendar.setTimeInMillis(calStartDate.getTimeInMillis()); for (int i = 0; i < days.size(); i++) { final int iYear = calCalendar.get(Calendar.YEAR); final int iMonth = calCalendar.get(Calendar.MONTH); final int iDay = calCalendar.get(Calendar.DAY_OF_MONTH); final int iDayOfWeek = calCalendar.get(Calendar.DAY_OF_WEEK); DateWidgetDayCell dayCell = days.get(i); // check today boolean bToday = false; if (calToday.get(Calendar.YEAR) == iYear) if (calToday.get(Calendar.MONTH) == iMonth) if (calToday.get(Calendar.DAY_OF_MONTH) == iDay) bToday = true; // check holiday boolean bHoliday = false; if ((iDayOfWeek == Calendar.SATURDAY) || (iDayOfWeek == Calendar.SUNDAY)) bHoliday = true; if ((iMonth == Calendar.JANUARY) && (iDay == 1)) bHoliday = true; dayCell.setData(iYear, iMonth, iDay, bToday, bHoliday, iMonthViewCurrentMonth); bSelected = false; if (bIsSelection) if ((iSelectedDay == iDay) && (iSelectedMonth == iMonth) && (iSelectedYear == iYear)) { bSelected = true; } dayCell.setSelected(bSelected); if (bSelected) daySelected = dayCell; calCalendar.add(Calendar.DAY_OF_MONTH, 1); } layContent.invalidate(); return daySelected; } private void UpdateStartDateForMonth() { iMonthViewCurrentMonth = calStartDate.get(Calendar.MONTH); iMonthViewCurrentYear = calStartDate.get(Calendar.YEAR); calStartDate.set(Calendar.DAY_OF_MONTH, 1); UpdateCurrentMonthDisplay(); // update days for week int iDay = 0; int iStartDay = iFirstDayOfWeek; if (iStartDay == Calendar.MONDAY) { iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY; if (iDay < 0) iDay = 6; } if (iStartDay == Calendar.SUNDAY) { iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY; if (iDay < 0) iDay = 6; } calStartDate.add(Calendar.DAY_OF_WEEK, -iDay); } private void UpdateCurrentMonthDisplay() { String s = calCalendar.get(Calendar.YEAR) + "/" + (calCalendar.get(Calendar.MONTH) + 1);// dateMonth.format(calCalendar.getTime()); btnToday.setText(s); mYear = calCalendar.get(Calendar.YEAR); } private void setPrevViewItem() { iMonthViewCurrentMonth--; if (iMonthViewCurrentMonth == -1) { iMonthViewCurrentMonth = 11; iMonthViewCurrentYear--; } calStartDate.set(Calendar.DAY_OF_MONTH, 1); calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); UpdateStartDateForMonth(); updateCalendar(); } private void setTodayViewItem() { calToday.setTimeInMillis(System.currentTimeMillis()); calToday.setFirstDayOfWeek(iFirstDayOfWeek); calStartDate.setTimeInMillis(calToday.getTimeInMillis()); calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); UpdateStartDateForMonth(); updateCalendar(); } private void setNextViewItem() { iMonthViewCurrentMonth++; if (iMonthViewCurrentMonth == 12) { iMonthViewCurrentMonth = 0; iMonthViewCurrentYear++; } calStartDate.set(Calendar.DAY_OF_MONTH, 1); calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); UpdateStartDateForMonth(); updateCalendar(); } private DateWidgetDayCell.OnItemClick mOnDayCellClick = new DateWidgetDayCell.OnItemClick() { public void OnClick(DateWidgetDayCell item) { calSelected.setTimeInMillis(item.getDate().getTimeInMillis()); item.setSelected(true); updateCalendar(); updateControlsState(); } }; private void updateControlsState() { SimpleDateFormat dateFull = new SimpleDateFormat("d MMMM yyyy"); mYear = calSelected.get(Calendar.YEAR); mMonth = calSelected.get(Calendar.MONTH); mDay = calSelected.get(Calendar.DAY_OF_MONTH); tv.setText(new StringBuilder().append(mYear).append("/") .append(format(mMonth + 1)).append("/").append(format(mDay)) .append("-----").append(dateFull.format(calSelected.getTime()))); } private String format(int x) { String s = "" + x; if (s.length() == 1) s = "0" + s; return s; } }
DateWidgetDayCell.java:
- packagecom.iaiai;
- importjava.util.Calendar;
- importandroid.content.Context;
- importandroid.graphics.Canvas;
- importandroid.graphics.LinearGradient;
- importandroid.graphics.Paint;
- importandroid.graphics.Rect;
- importandroid.graphics.RectF;
- importandroid.graphics.Shader;
- importandroid.view.KeyEvent;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- importandroid.view.animation.AlphaAnimation;
- importandroid.widget.LinearLayout.LayoutParams;
- /**
- *
- *<p>
- *Title:DateWidgetDayCell.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-19
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- publicclassDateWidgetDayCellextendsView{
- //types
- publicinterfaceOnItemClick{
- publicvoidOnClick(DateWidgetDayCellitem);
- }
- publicstaticintANIM_ALPHA_DURATION=100;
- //fields
- privatefinalstaticfloatfTextSize=22;
- privatefinalstaticintiMargin=1;
- privatefinalstaticintiAlphaInactiveMonth=0x88;
- //fields
- privateintiDateYear=0;
- privateintiDateMonth=0;
- privateintiDateDay=0;
- //fields
- privateOnItemClickitemClick=null;
- privatePaintpt=newPaint();
- privateRectFrect=newRectF();
- privateStringsDate="";
- //fields
- privatebooleanbSelected=false;
- privatebooleanbIsActiveMonth=false;
- privatebooleanbToday=false;
- privatebooleanbHoliday=false;
- privatebooleanbTouchedDown=false;
- //methods
- publicDateWidgetDayCell(Contextcontext,intiWidth,intiHeight){
- super(context);
- setFocusable(true);
- setLayoutParams(newLayoutParams(iWidth,iHeight));
- }
- publicbooleangetSelected(){
- returnthis.bSelected;
- }
- @Override
- publicvoidsetSelected(booleanbEnable){
- if(this.bSelected!=bEnable){
- this.bSelected=bEnable;
- this.invalidate();
- }
- }
- publicvoidsetData(intiYear,intiMonth,intiDay,booleanbToday,
- booleanbHoliday,intiActiveMonth){
- iDateYear=iYear;
- iDateMonth=iMonth;
- iDateDay=iDay;
- this.sDate=Integer.toString(iDateDay);
- this.bIsActiveMonth=(iDateMonth==iActiveMonth);
- this.bToday=bToday;
- this.bHoliday=bHoliday;
- }
- publicvoidsetItemClick(OnItemClickitemClick){
- this.itemClick=itemClick;
- }
- privateintgetTextHeight(){
- return(int)(-pt.ascent()+pt.descent());
- }
- @Override
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- booleanbResult=super.onKeyDown(keyCode,event);
- if((keyCode==KeyEvent.KEYCODE_DPAD_CENTER)
- ||(keyCode==KeyEvent.KEYCODE_ENTER)){
- doItemClick();
- }
- returnbResult;
- }
- @Override
- publicbooleanonKeyUp(intkeyCode,KeyEventevent){
- booleanbResult=super.onKeyUp(keyCode,event);
- returnbResult;
- }
- publicvoiddoItemClick(){
- if(itemClick!=null)
- itemClick.OnClick(this);
- }
- @Override
- protectedvoidonFocusChanged(booleangainFocus,intdirection,
- RectpreviouslyFocusedRect){
- super.onFocusChanged(gainFocus,direction,previouslyFocusedRect);
- invalidate();
- }
- publicCalendargetDate(){
- CalendarcalDate=Calendar.getInstance();
- calDate.clear();
- calDate.set(Calendar.YEAR,iDateYear);
- calDate.set(Calendar.MONTH,iDateMonth);
- calDate.set(Calendar.DAY_OF_MONTH,iDateDay);
- returncalDate;
- }
- @Override
- protectedvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- //initrectangles
- rect.set(0,0,this.getWidth(),this.getHeight());
- rect.inset(1,1);
- //drawing
- finalbooleanbFocused=IsViewFocused();
- drawDayView(canvas,bFocused);
- drawDayNumber(canvas,bFocused);
- }
- privatevoiddrawDayView(Canvascanvas,booleanbFocused){
- if(bSelected||bFocused){
- LinearGradientlGradBkg=null;
- if(bFocused){
- lGradBkg=newLinearGradient(rect.left,0,rect.right,0,
- DayStyle.iColorBkgFocusDark,
- DayStyle.iColorBkgFocusLight,Shader.TileMode.CLAMP);
- }
- if(bSelected){
- lGradBkg=newLinearGradient(rect.left,0,rect.right,0,
- DayStyle.iColorBkgSelectedDark,
- DayStyle.iColorBkgSelectedLight,Shader.TileMode.CLAMP);
- }
- if(lGradBkg!=null){
- pt.setShader(lGradBkg);
- canvas.drawRect(rect,pt);
- }
- pt.setShader(null);
- }else{
- pt.setColor(DayStyle.getColorBkg(bHoliday,bToday));
- if(!bIsActiveMonth)
- pt.setAlpha(iAlphaInactiveMonth);
- canvas.drawRect(rect,pt);
- }
- }
- publicvoiddrawDayNumber(Canvascanvas,booleanbFocused){
- //drawdaynumber
- pt.setTypeface(null);
- pt.setAntiAlias(true);
- pt.setShader(null);
- pt.setFakeBoldText(true);
- pt.setTextSize(fTextSize);
- pt.setUnderlineText(false);
- if(bToday)
- pt.setUnderlineText(true);
- intiTextPosX=(int)rect.right-(int)pt.measureText(sDate);
- intiTextPosY=(int)rect.bottom+(int)(-pt.ascent())
- -getTextHeight();
- iTextPosX-=((int)rect.width()>>1)
- -((int)pt.measureText(sDate)>>1);
- iTextPosY-=((int)rect.height()>>1)-(getTextHeight()>>1);
- //drawtext
- if(bSelected||bFocused){
- if(bSelected)
- pt.setColor(DayStyle.iColorTextSelected);
- if(bFocused)
- pt.setColor(DayStyle.iColorTextFocused);
- }else{
- pt.setColor(DayStyle.getColorText(bHoliday,bToday));
- }
- if(!bIsActiveMonth)
- pt.setAlpha(iAlphaInactiveMonth);
- canvas.drawText(sDate,iTextPosX,iTextPosY+iMargin,pt);
- pt.setUnderlineText(false);
- }
- publicbooleanIsViewFocused(){
- return(this.isFocused()||bTouchedDown);
- }
- @Override
- publicbooleanonTouchEvent(MotionEventevent){
- booleanbHandled=false;
- if(event.getAction()==MotionEvent.ACTION_DOWN){
- bHandled=true;
- bTouchedDown=true;
- invalidate();
- startAlphaAnimIn(DateWidgetDayCell.this);
- }
- if(event.getAction()==MotionEvent.ACTION_CANCEL){
- bHandled=true;
- bTouchedDown=false;
- invalidate();
- }
- if(event.getAction()==MotionEvent.ACTION_UP){
- bHandled=true;
- bTouchedDown=false;
- invalidate();
- doItemClick();
- }
- returnbHandled;
- }
- publicstaticvoidstartAlphaAnimIn(Viewview){
- AlphaAnimationanim=newAlphaAnimation(0.5F,1);
- anim.setDuration(ANIM_ALPHA_DURATION);
- anim.startNow();
- view.startAnimation(anim);
- }
- }
package com.iaiai; import java.util.Calendar; import android.content.Context; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.LinearLayout.LayoutParams; /** * * <p> * Title: DateWidgetDayCell.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-19 * </p> * * @author 丸子 * @version 0.0.1 */ public class DateWidgetDayCell extends View { // types public interface OnItemClick { public void OnClick(DateWidgetDayCell item); } public static int ANIM_ALPHA_DURATION = 100; // fields private final static float fTextSize = 22; private final static int iMargin = 1; private final static int iAlphaInactiveMonth = 0x88; // fields private int iDateYear = 0; private int iDateMonth = 0; private int iDateDay = 0; // fields private OnItemClick itemClick = null; private Paint pt = new Paint(); private RectF rect = new RectF(); private String sDate = ""; // fields private boolean bSelected = false; private boolean bIsActiveMonth = false; private boolean bToday = false; private boolean bHoliday = false; private boolean bTouchedDown = false; // methods public DateWidgetDayCell(Context context, int iWidth, int iHeight) { super(context); setFocusable(true); setLayoutParams(new LayoutParams(iWidth, iHeight)); } public boolean getSelected() { return this.bSelected; } @Override public void setSelected(boolean bEnable) { if (this.bSelected != bEnable) { this.bSelected = bEnable; this.invalidate(); } } public void setData(int iYear, int iMonth, int iDay, boolean bToday, boolean bHoliday, int iActiveMonth) { iDateYear = iYear; iDateMonth = iMonth; iDateDay = iDay; this.sDate = Integer.toString(iDateDay); this.bIsActiveMonth = (iDateMonth == iActiveMonth); this.bToday = bToday; this.bHoliday = bHoliday; } public void setItemClick(OnItemClick itemClick) { this.itemClick = itemClick; } private int getTextHeight() { return (int) (-pt.ascent() + pt.descent()); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { boolean bResult = super.onKeyDown(keyCode, event); if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) { doItemClick(); } return bResult; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { boolean bResult = super.onKeyUp(keyCode, event); return bResult; } public void doItemClick() { if (itemClick != null) itemClick.OnClick(this); } @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); invalidate(); } public Calendar getDate() { Calendar calDate = Calendar.getInstance(); calDate.clear(); calDate.set(Calendar.YEAR, iDateYear); calDate.set(Calendar.MONTH, iDateMonth); calDate.set(Calendar.DAY_OF_MONTH, iDateDay); return calDate; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // init rectangles rect.set(0, 0, this.getWidth(), this.getHeight()); rect.inset(1, 1); // drawing final boolean bFocused = IsViewFocused(); drawDayView(canvas, bFocused); drawDayNumber(canvas, bFocused); } private void drawDayView(Canvas canvas, boolean bFocused) { if (bSelected || bFocused) { LinearGradient lGradBkg = null; if (bFocused) { lGradBkg = new LinearGradient(rect.left, 0, rect.right, 0, DayStyle.iColorBkgFocusDark, DayStyle.iColorBkgFocusLight, Shader.TileMode.CLAMP); } if (bSelected) { lGradBkg = new LinearGradient(rect.left, 0, rect.right, 0, DayStyle.iColorBkgSelectedDark, DayStyle.iColorBkgSelectedLight, Shader.TileMode.CLAMP); } if (lGradBkg != null) { pt.setShader(lGradBkg); canvas.drawRect(rect, pt); } pt.setShader(null); } else { pt.setColor(DayStyle.getColorBkg(bHoliday, bToday)); if (!bIsActiveMonth) pt.setAlpha(iAlphaInactiveMonth); canvas.drawRect(rect, pt); } } public void drawDayNumber(Canvas canvas, boolean bFocused) { // draw day number pt.setTypeface(null); pt.setAntiAlias(true); pt.setShader(null); pt.setFakeBoldText(true); pt.setTextSize(fTextSize); pt.setUnderlineText(false); if (bToday) pt.setUnderlineText(true); int iTextPosX = (int) rect.right - (int) pt.measureText(sDate); int iTextPosY = (int) rect.bottom + (int) (-pt.ascent()) - getTextHeight(); iTextPosX -= ((int) rect.width() >> 1) - ((int) pt.measureText(sDate) >> 1); iTextPosY -= ((int) rect.height() >> 1) - (getTextHeight() >> 1); // draw text if (bSelected || bFocused) { if (bSelected) pt.setColor(DayStyle.iColorTextSelected); if (bFocused) pt.setColor(DayStyle.iColorTextFocused); } else { pt.setColor(DayStyle.getColorText(bHoliday, bToday)); } if (!bIsActiveMonth) pt.setAlpha(iAlphaInactiveMonth); canvas.drawText(sDate, iTextPosX, iTextPosY + iMargin, pt); pt.setUnderlineText(false); } public boolean IsViewFocused() { return (this.isFocused() || bTouchedDown); } @Override public boolean onTouchEvent(MotionEvent event) { boolean bHandled = false; if (event.getAction() == MotionEvent.ACTION_DOWN) { bHandled = true; bTouchedDown = true; invalidate(); startAlphaAnimIn(DateWidgetDayCell.this); } if (event.getAction() == MotionEvent.ACTION_CANCEL) { bHandled = true; bTouchedDown = false; invalidate(); } if (event.getAction() == MotionEvent.ACTION_UP) { bHandled = true; bTouchedDown = false; invalidate(); doItemClick(); } return bHandled; } public static void startAlphaAnimIn(View view) { AlphaAnimation anim = new AlphaAnimation(0.5F, 1); anim.setDuration(ANIM_ALPHA_DURATION); anim.startNow(); view.startAnimation(anim); } }
DateWidgetDayHeader.java:
- packagecom.iaiai;
- importjava.util.Calendar;
- importandroid.content.Context;
- importandroid.graphics.Canvas;
- importandroid.graphics.Paint;
- importandroid.graphics.RectF;
- importandroid.view.View;
- importandroid.widget.LinearLayout.LayoutParams;
- /**
- *
- *<p>
- *Title:DateWidgetDayHeader.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-19
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- publicclassDateWidgetDayHeaderextendsView{
- //fields
- privatefinalstaticintiDayHeaderFontSize=12;
- //fields
- privatePaintpt=newPaint();
- privateRectFrect=newRectF();
- privateintiWeekDay=-1;
- privatebooleanbHoliday=false;
- //methods
- publicDateWidgetDayHeader(Contextcontext,intiWidth,intiHeight){
- super(context);
- setLayoutParams(newLayoutParams(iWidth,iHeight));
- }
- publicvoidsetData(intiWeekDay){
- this.iWeekDay=iWeekDay;
- this.bHoliday=false;
- if((iWeekDay==Calendar.SATURDAY)||(iWeekDay==Calendar.SUNDAY))
- this.bHoliday=true;
- }
- privatevoiddrawDayHeader(Canvascanvas){
- if(iWeekDay!=-1){
- //background
- pt.setColor(DayStyle.getColorFrameHeader(bHoliday));
- canvas.drawRect(rect,pt);
- //text
- pt.setTypeface(null);
- pt.setTextSize(iDayHeaderFontSize);
- pt.setAntiAlias(true);
- pt.setFakeBoldText(true);
- pt.setColor(DayStyle.getColorTextHeader(bHoliday));
- finalintiTextPosY=getTextHeight();
- finalStringsDayName=DayStyle.getWeekDayName(iWeekDay);
- //drawdayname
- finalintiDayNamePosX=(int)rect.left
- +((int)rect.width()>>1)
- -((int)pt.measureText(sDayName)>>1);
- canvas.drawText(sDayName,iDayNamePosX,rect.top+iTextPosY+2,
- pt);
- }
- }
- privateintgetTextHeight(){
- return(int)(-pt.ascent()+pt.descent());
- }
- @Override
- protectedvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- //initrectangles
- rect.set(0,0,this.getWidth(),this.getHeight());
- rect.inset(1,1);
- //drawing
- drawDayHeader(canvas);
- }
- }
package com.iaiai; import java.util.Calendar; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.view.View; import android.widget.LinearLayout.LayoutParams; /** * * <p> * Title: DateWidgetDayHeader.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-19 * </p> * * @author 丸子 * @version 0.0.1 */ public class DateWidgetDayHeader extends View { // fields private final static int iDayHeaderFontSize = 12; // fields private Paint pt = new Paint(); private RectF rect = new RectF(); private int iWeekDay = -1; private boolean bHoliday = false; // methods public DateWidgetDayHeader(Context context, int iWidth, int iHeight) { super(context); setLayoutParams(new LayoutParams(iWidth, iHeight)); } public void setData(int iWeekDay) { this.iWeekDay = iWeekDay; this.bHoliday = false; if ((iWeekDay == Calendar.SATURDAY) || (iWeekDay == Calendar.SUNDAY)) this.bHoliday = true; } private void drawDayHeader(Canvas canvas) { if (iWeekDay != -1) { // background pt.setColor(DayStyle.getColorFrameHeader(bHoliday)); canvas.drawRect(rect, pt); // text pt.setTypeface(null); pt.setTextSize(iDayHeaderFontSize); pt.setAntiAlias(true); pt.setFakeBoldText(true); pt.setColor(DayStyle.getColorTextHeader(bHoliday)); final int iTextPosY = getTextHeight(); final String sDayName = DayStyle.getWeekDayName(iWeekDay); // draw day name final int iDayNamePosX = (int) rect.left + ((int) rect.width() >> 1) - ((int) pt.measureText(sDayName) >> 1); canvas.drawText(sDayName, iDayNamePosX, rect.top + iTextPosY + 2, pt); } } private int getTextHeight() { return (int) (-pt.ascent() + pt.descent()); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // init rectangles rect.set(0, 0, this.getWidth(), this.getHeight()); rect.inset(1, 1); // drawing drawDayHeader(canvas); } }
DayStyle.java:
- packagecom.iaiai;
- importjava.util.Calendar;
- /**
- *
- *<p>
- *Title:DayStyle.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-19
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- publicclassDayStyle{
- //methods
- privatestaticString[]getWeekDayNames(){
- String[]vec=newString[10];
- //vec[Calendar.SUNDAY]="Sun";
- //vec[Calendar.MONDAY]="Mon";
- //vec[Calendar.TUESDAY]="Tue";
- //vec[Calendar.WEDNESDAY]="Wed";
- //vec[Calendar.THURSDAY]="Thu";
- //vec[Calendar.FRIDAY]="Fri";
- //vec[Calendar.SATURDAY]="Sat";
- vec[Calendar.SUNDAY]="日";
- vec[Calendar.MONDAY]="月";
- vec[Calendar.TUESDAY]="火";
- vec[Calendar.WEDNESDAY]="水";
- vec[Calendar.THURSDAY]="木";
- vec[Calendar.FRIDAY]="金";
- vec[Calendar.SATURDAY]="土";
- returnvec;
- }
- publicstaticStringgetWeekDayName(intiDay){
- returnvecStrWeekDayNames[iDay];
- }
- //fields
- privatefinalstaticString[]vecStrWeekDayNames=getWeekDayNames();
- //fields
- publicfinalstaticintiColorFrameHeader=0xff666666;
- publicfinalstaticintiColorFrameHeaderHoliday=0xff707070;
- publicfinalstaticintiColorTextHeader=0xffcccccc;
- publicfinalstaticintiColorTextHeaderHoliday=0xffd0d0d0;
- publicfinalstaticintiColorText=0xffdddddd;
- publicfinalstaticintiColorBkg=0xff888888;
- publicfinalstaticintiColorTextHoliday=0xfff0f0f0;
- publicfinalstaticintiColorBkgHoliday=0xffaaaaaa;
- publicfinalstaticintiColorTextToday=0xff002200;
- publicfinalstaticintiColorBkgToday=0xff88bb88;
- publicfinalstaticintiColorTextSelected=0xff001122;
- publicfinalstaticintiColorBkgSelectedLight=0xffbbddff;
- publicfinalstaticintiColorBkgSelectedDark=0xff225599;
- publicfinalstaticintiColorTextFocused=0xff221100;
- publicfinalstaticintiColorBkgFocusLight=0xffffddbb;
- publicfinalstaticintiColorBkgFocusDark=0xffaa5500;
- //methods
- publicstaticintgetColorFrameHeader(booleanbHoliday){
- if(bHoliday)
- returniColorFrameHeaderHoliday;
- returniColorFrameHeader;
- }
- publicstaticintgetColorTextHeader(booleanbHoliday){
- if(bHoliday)
- returniColorTextHeaderHoliday;
- returniColorTextHeader;
- }
- publicstaticintgetColorText(booleanbHoliday,booleanbToday){
- if(bToday)
- returniColorTextToday;
- if(bHoliday)
- returniColorTextHoliday;
- returniColorText;
- }
- publicstaticintgetColorBkg(booleanbHoliday,booleanbToday){
- if(bToday)
- returniColorBkgToday;
- if(bHoliday)
- returniColorBkgHoliday;
- returniColorBkg;
- }
- publicstaticintgetWeekDay(intindex,intiFirstDayOfWeek){
- intiWeekDay=-1;
- if(iFirstDayOfWeek==Calendar.MONDAY){
- iWeekDay=index+Calendar.MONDAY;
- if(iWeekDay>Calendar.SATURDAY)
- iWeekDay=Calendar.SUNDAY;
- }
- if(iFirstDayOfWeek==Calendar.SUNDAY){
- iWeekDay=index+Calendar.SUNDAY;
- }
- returniWeekDay;
- }
- }
package com.iaiai; import java.util.Calendar; /** * * <p> * Title: DayStyle.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-19 * </p> * * @author 丸子 * @version 0.0.1 */ public class DayStyle { // methods private static String[] getWeekDayNames() { String[] vec = new String[10]; // vec[Calendar.SUNDAY] = "Sun"; // vec[Calendar.MONDAY] = "Mon"; // vec[Calendar.TUESDAY] = "Tue"; // vec[Calendar.WEDNESDAY] = "Wed"; // vec[Calendar.THURSDAY] = "Thu"; // vec[Calendar.FRIDAY] = "Fri"; // vec[Calendar.SATURDAY] = "Sat"; vec[Calendar.SUNDAY] = "日"; vec[Calendar.MONDAY] = "月"; vec[Calendar.TUESDAY] = "火"; vec[Calendar.WEDNESDAY] = "水"; vec[Calendar.THURSDAY] = "木"; vec[Calendar.FRIDAY] = "金"; vec[Calendar.SATURDAY] = "土"; return vec; } public static String getWeekDayName(int iDay) { return vecStrWeekDayNames[iDay]; } // fields private final static String[] vecStrWeekDayNames = getWeekDayNames(); // fields public final static int iColorFrameHeader = 0xff666666; public final static int iColorFrameHeaderHoliday = 0xff707070; public final static int iColorTextHeader = 0xffcccccc; public final static int iColorTextHeaderHoliday = 0xffd0d0d0; public final static int iColorText = 0xffdddddd; public final static int iColorBkg = 0xff888888; public final static int iColorTextHoliday = 0xfff0f0f0; public final static int iColorBkgHoliday = 0xffaaaaaa; public final static int iColorTextToday = 0xff002200; public final static int iColorBkgToday = 0xff88bb88; public final static int iColorTextSelected = 0xff001122; public final static int iColorBkgSelectedLight = 0xffbbddff; public final static int iColorBkgSelectedDark = 0xff225599; public final static int iColorTextFocused = 0xff221100; public final static int iColorBkgFocusLight = 0xffffddbb; public final static int iColorBkgFocusDark = 0xffaa5500; // methods public static int getColorFrameHeader(boolean bHoliday) { if (bHoliday) return iColorFrameHeaderHoliday; return iColorFrameHeader; } public static int getColorTextHeader(boolean bHoliday) { if (bHoliday) return iColorTextHeaderHoliday; return iColorTextHeader; } public static int getColorText(boolean bHoliday, boolean bToday) { if (bToday) return iColorTextToday; if (bHoliday) return iColorTextHoliday; return iColorText; } public static int getColorBkg(boolean bHoliday, boolean bToday) { if (bToday) return iColorBkgToday; if (bHoliday) return iColorBkgHoliday; return iColorBkg; } public static int getWeekDay(int index, int iFirstDayOfWeek) { int iWeekDay = -1; if (iFirstDayOfWeek == Calendar.MONDAY) { iWeekDay = index + Calendar.MONDAY; if (iWeekDay > Calendar.SATURDAY) iWeekDay = Calendar.SUNDAY; } if (iFirstDayOfWeek == Calendar.SUNDAY) { iWeekDay = index + Calendar.SUNDAY; } return iWeekDay; } }
SymbolButton.java:
- packagecom.iaiai;
- importandroid.content.Context;
- importandroid.graphics.Canvas;
- importandroid.graphics.Paint;
- importandroid.graphics.RectF;
- importandroid.widget.Button;
- /**
- *
- *<p>
- *Title:SymbolButton.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-19
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- publicclassSymbolButtonextendsButton{
- //fields
- privatestaticfinalintiColor=0xffaaaaaa;
- privatestaticfinalintiColorActive=0xff442200;
- //fields
- publicenumsymbol{
- none,arrowLeft,arrowRight
- };
- //fields
- privatePaintpt=newPaint();
- privateRectFrect=newRectF();
- privateRectFrectDraw=newRectF();
- privatesymbolsymbolType=symbol.none;
- //methods
- publicSymbolButton(Contextcontext,symbolsymbolType){
- super(context);
- this.symbolType=symbolType;
- }
- @Override
- publicvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- pt.setAntiAlias(true);
- pt.setStrokeCap(Paint.Cap.ROUND);
- rectDraw.set(0,0,getWidth(),getHeight());
- rectDraw.left+=6;
- rectDraw.right-=6;
- rectDraw.top+=4;
- rectDraw.bottom-=8;
- if(symbolType!=symbol.none){
- pt.setStrokeWidth(5);
- pt.setColor(iColor);
- if(this.isPressed()||this.isFocused())
- pt.setColor(iColorActive);
- drawArrow(canvas);
- }
- }
- privatevoiddrawArrow(Canvascanvas){
- rect.set(rectDraw);
- rect.inset(15,5);
- canvas.drawLine(rect.left,rect.centerY(),rect.right,rect.centerY(),
- pt);
- if(symbolType==symbol.arrowRight){
- canvas.drawLine(rect.right,rect.centerY(),rect.right-6,
- rect.top,pt);
- canvas.drawLine(rect.right,rect.centerY(),rect.right-6,
- rect.bottom,pt);
- }
- if(symbolType==symbol.arrowLeft){
- canvas.drawLine(rect.left,rect.centerY(),rect.left+6,rect.top,
- pt);
- canvas.drawLine(rect.left,rect.centerY(),rect.left+6,
- rect.bottom,pt);
- }
- }
- }
package com.iaiai; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.widget.Button; /** * * <p> * Title: SymbolButton.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-8-19 * </p> * * @author 丸子 * @version 0.0.1 */ public class SymbolButton extends Button { // fields private static final int iColor = 0xffaaaaaa; private static final int iColorActive = 0xff442200; // fields public enum symbol { none, arrowLeft, arrowRight }; // fields private Paint pt = new Paint(); private RectF rect = new RectF(); private RectF rectDraw = new RectF(); private symbol symbolType = symbol.none; // methods public SymbolButton(Context context, symbol symbolType) { super(context); this.symbolType = symbolType; } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); pt.setAntiAlias(true); pt.setStrokeCap(Paint.Cap.ROUND); rectDraw.set(0, 0, getWidth(), getHeight()); rectDraw.left += 6; rectDraw.right -= 6; rectDraw.top += 4; rectDraw.bottom -= 8; if (symbolType != symbol.none) { pt.setStrokeWidth(5); pt.setColor(iColor); if (this.isPressed() || this.isFocused()) pt.setColor(iColorActive); drawArrow(canvas); } } private void drawArrow(Canvas canvas) { rect.set(rectDraw); rect.inset(15, 5); canvas.drawLine(rect.left, rect.centerY(), rect.right, rect.centerY(), pt); if (symbolType == symbol.arrowRight) { canvas.drawLine(rect.right, rect.centerY(), rect.right - 6, rect.top, pt); canvas.drawLine(rect.right, rect.centerY(), rect.right - 6, rect.bottom, pt); } if (symbolType == symbol.arrowLeft) { canvas.drawLine(rect.left, rect.centerY(), rect.left + 6, rect.top, pt); canvas.drawLine(rect.left, rect.centerY(), rect.left + 6, rect.bottom, pt); } } }
相关推荐
在Android开发中,创建一个日历方式显示的日期选择组件是一项常见的需求,这通常涉及到自定义控件的设计。从给出的文件内容来看,这个组件由五个核心类组成:DateWidget、DateWidgetDayCell、DateWidgetDayHeader、...
在Android开发中,创建一个日历方式显示的日期选择组件是非常常见的需求,这通常涉及到自定义控件的设计。本示例中的"DateWidget"组件是一个专门为Android应用设计的日期选择器,它允许用户以日历的形式查看并选择...
【Android 日历方式显示的日期选择组件】 在Android开发中,日期选择是一个常见的需求,而使用日历控件可以提供用户友好的交互体验。这里我们讨论的是一个名为`DateWidget`的自定义日历组件,它以日历的形式展示...
"android launcher 日历图标显示日期.zip"这个压缩包文件可能包含了一种实现,使得日历应用的图标能够动态显示当前日期,从而提供一种直观的方式来提醒用户今天的日期。这一特性通常涉及到Android的自定义 Launcher ...
综上所述,"Android日历日期段选择"涉及到了Android的基础组件、自定义视图、事件处理、数据存储以及权限管理等多个方面,开发者需要对这些知识点有深入的理解和实践经验,才能有效地实现这一功能。在实践中,不断...
通过设置`android:calendarViewShown`和`android:datePickerMode`属性,可以选择显示模式,比如默认的日期选择器或者日历视图。开发者可以通过`DatePicker.OnDateChangedListener`监听日期的变化,以便在用户选择新...
在Android开发中,实现类似去哪儿、携程等酒店预订应用中的日历选择功能是常见的需求,这一功能让用户能够方便地选择入住和退房日期。本文将深入探讨如何在Android项目中构建这样的日历选择器,并基于IDEA提供的源码...
在Android开发中,日期时间选择控件是用户界面中常见且重要的组成部分,它允许用户方便地选择日期或时间。在Android SDK中,内置了DatePicker和TimePicker两种原生控件,但有时候,开发者可能需要更加强大、定制化的...
总结来说,构建一个自定义的`PopupWindow`日历日期时间选择器,需要综合运用Android UI设计、事件处理、日期和时间操作,以及自定义组件的知识。通过这样的实践,不仅可以提升开发技能,也能为用户提供更加个性化的...
滚轮控件,也称为Picker,是Android系统中的一种基础组件,它由一系列可滚动的选项构成,用户可以通过上滑或下滑来选择想要的值。在自定义日期和时间选择控件时,我们需要创建多个滚轮,分别代表年、月、日、小时和...
在Android开发中,创建一个可自定义的日历控件是一个常见的需求,特别是在处理与日期、时间相关的应用中,如日程管理、排班系统等。本文将深入探讨如何实现一个功能丰富的日历方案,包括支持农历、自定义日历控件、...
总结来说,这个项目涉及到使用uni-app框架开发一个包含打卡信息和农历显示功能的日历选择组件,通过组件化开发方式提高代码复用性和可维护性。通过js库处理农历转换,使得日历既具备基本的日期选择功能,又满足了...
在Android开发中,日历控件是经常被用于创建日期选择功能的重要组件,尤其是在预订、计划等场景下,用户需要设定一个开始时间和结束时间。"android 日历控件 可选开始时间结束时间"这个标题所提及的就是这样一个特定...
综上所述,Android日期选择器(DatePicker)是用户界面中用于选择日期的组件,它可以结合日历(Calendar)类处理日期逻辑。GridView则可以用于自定义日期选择器的展示方式,通过单元格展示一个月的日期。在实际应用...
这个“Android日历年月选择器”功能是为了解决这样的需求,它允许用户通过简单的滚动操作来选取年份和月份,而无需打开完整的日历视图。下面将详细介绍如何实现这样一个组件,以及它可能涉及到的关键知识点。 首先...
这种功能常用于日程管理应用,为用户提供直观的日期选择方式。"Android日历可左右活动上下定位收缩"这个项目的核心在于实现一个高度自定义的日历控件,以下将详细解释实现这一功能的关键知识点。 首先,我们需要...
在uni-app中,开发一个具备自定义文案和上下滑动选择日期功能的日历组件,可以大大提升用户体验。下面将详细解释这个组件的相关知识点。 1. **uni-app框架**:uni-app是一个基于Vue.js的开发框架,它的核心思想是...
总的来说,创建一个精美的、内容和样式可扩展的Android日历组件,需要对Android UI组件、日期处理和事件监听有深入的理解。通过这个过程,开发者不仅可以提升自己的编程技巧,还能更好地满足用户对个性化和用户体验...
在Android开发中,系统默认的日期和时间选择器虽然实用,但往往无法满足所有场景的需求。因此,开发者经常需要自定义日期选择器来提供更符合应用风格或特定功能的交互体验。这篇内容将深入探讨如何在Android中创建一...