android日历组件,代码见附件.

效果图:

 

 

代码:

 

package com.test.calendar;

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.TextView;
import android.widget.LinearLayout.LayoutParams;

import com.test.calendar.DateWidgetDayCell;
import com.test.calendar.DateWidgetDayHeader;
import com.test.calendar.SymbolButton;
import com.test.calendar.DayStyle;

public class DateWidget extends Activity {
    private ArrayList days = new ArrayList();
    // 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;
    }

}

 

-----------------------------------------------------------------

package com.test.calendar;

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;

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);
    }

}

 

 

-------------------------------------------

package com.test.calendar;

import java.util.*;
import android.content.*;
import android.view.*;
import android.widget.LinearLayout.LayoutParams;
import android.graphics.*;

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);
    }

}
--------------------------------------------------------

package com.test.calendar;

import java.util.*;

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;
    }

}
----------------------------------------------------

package com.test.calendar;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.widget.Button;

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);
        }
    }

}

更多相关文章

  1. android 黑屏状态下,开屏代码
  2. Android图片放大修改代码
  3. Android获取基站坐标代码
  4. Android——实现在纯Java代码里写布局
  5. android表情Gson EditText TextView
  6. android cts and junit
  7. Android(安卓)studio 常见错误以及问题
  8. Android(安卓)实现分享功能的方法 分类: Android(安卓)...
  9. Android(安卓)SDK 源代码编译

随机推荐

  1. Android(安卓)の文字翻转动画的实现
  2. Android 设置图片倒影效果
  3. 自定义menu替代TabHost中的TabWidget
  4. Android(安卓)Studio开发Groovy
  5. Android ProgressBar进度条
  6. 译:Android的一些基础问题(一)
  7. Android联系人3--联系人分组相关
  8. android中tcpdump抓包
  9. Android系统中关于音量调节粒度修改
  10. 透明button 转