运行结果:
此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);
}
}
}