- 浏览: 2204039 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
运行结果:
此Widget组件只包含五个类文件:
*红色为启动的activity
DateWidget.java:
DateWidgetDayCell.java:
DateWidgetDayHeader.java:
DayStyle.java:
SymbolButton.java:
此Widget组件只包含五个类文件:
- DateWidget
- DateWidgetDayCell
- DateWidgetDayHeader
- DayStyle
- SymbolButton
*红色为启动的activity
DateWidget.java:
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:
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:
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:
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:
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); } } }
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 635本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1111颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1005从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1181Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1020Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 848前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 937监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 808在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 979最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1344##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1143当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 791setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1525问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 781底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1792点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1383import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2337TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1567一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 880Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 941最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
在Android开发中,日期选择是一个常见的需求,而使用日历控件可以提供用户友好的交互体验。这里我们讨论的是一个名为`DateWidget`的自定义日历组件,它以日历的形式展示日期,并允许用户进行选择。 `DateWidget`...
在Android开发中,日期时间选择控件是用户界面中常见且重要的组成部分,它允许用户方便地选择日期或时间。在Android SDK中,内置了DatePicker和TimePicker两种原生控件,但有时候,开发者可能需要更加强大、定制化的...
总的来说,这个Android日历组件提供了一个自定义的日历视图,允许用户以日历的形式选择日期。开发者可以通过修改和扩展这些类来满足特定的应用场景需求,如添加日期范围选择、禁用特定日期等功能。这样的组件在各种...
在Android开发中,创建一个日历方式显示的日期选择组件是非常常见的需求,这通常涉及到自定义控件的设计。本示例中的"DateWidget"组件是一个专门为Android应用设计的日期选择器,它允许用户以日历的形式查看并选择...
在Android开发中,为了提供用户友好的交互体验,开发者经常需要自定义各种控件,其中滚轮式日期和时间选择控件是一种常见的需求。这种控件通常用于设置事件的日期和时间,比如日历应用、闹钟设定等场景。本文将深入...
在Android开发中,日历控件是经常被用于创建日期选择功能的重要组件,尤其是在预订、计划等场景下,用户需要设定一个开始时间和结束时间。"android 日历控件 可选开始时间结束时间"这个标题所提及的就是这样一个特定...
在Android开发中,创建一个可自定义的日历控件是一个常见的需求,特别是在处理与日期、时间相关的应用中,如日程管理、排班系统等。本文将深入探讨如何实现一个功能丰富的日历方案,包括支持农历、自定义日历控件、...
在Android应用开发中,日历控件是一种常用的组件,它允许用户方便地选择日期,常用于事件安排、约会提醒等功能。本压缩包提供的是关于如何在Android中实现自定义日历控件的源代码示例。下面将详细介绍如何在Android...
在Android开发中,日历控件是常见的用户界面元素,用于显示和选择日期。"单行横向滑动的日历控件"是一种优化的交互设计,它允许用户在水平方向上轻松浏览月份,而不是传统的垂直滚动多行日期。这种设计特别适用于...
它提供了一个美观且易于使用的滚动选择日期的控件,使得用户可以方便地通过滚动方式选取日期,而不是传统的弹出日历对话框。 首先,我们要理解这个控件的核心功能。滚动选择日期控件通常由年、月、日三个独立的滚动...
在Android应用开发中,日历控件是必不可少的组件之一,尤其对于日程管理、时间选择等场景。标题“超级漂亮的Android日历控件”暗示我们这里有一个美观且易用的日历视图,可能是一个自定义控件或者第三方库。描述中...
首先,我们关注的"android日历控件"是一个用于显示日期并允许用户交互的组件,它通常包括月份和日期的选择,以及可能的事件添加和查看功能。在Android SDK中,虽然系统自带了一些基本的日历API,如`Calendar`类和`...
在Android开发中,实现类似去哪儿、携程等酒店预订应用中的日历选择功能是常见的需求,这一功能让用户能够方便地选择入住和退房日期。本文将深入探讨如何在Android项目中构建这样的日历选择器,并基于IDEA提供的源码...
"Android日历可左右活动上下定位收缩"这个项目的核心在于实现一个高度自定义的日历控件,以下将详细解释实现这一功能的关键知识点。 首先,我们需要了解Android的View体系结构。在Android中,自定义视图通常继承自...
- 日历控件是Android应用中用于展示日期和时间的一种UI组件,通常用于日程管理、事件安排等场景。 - 在Android中,系统提供了`Calendar`类用于处理日期和时间的操作,但并不包含可视化展示的功能。因此,开发者...
"android日历抽屉控件"就是一个很好的示例,它提供了一种创新的日历展示方式,即从上到下的滑动抽屉效果。这个控件不仅在功能上满足了日历的查看需求,还通过独特的交互设计提高了用户操作的趣味性和便捷性。 首先...
总的来说,"Android 非常漂亮的滚动选择日期控件"提供了一种优化日期选择体验的方式,它可能是通过创新的界面设计和优秀的交互功能,来提升应用的专业性和用户体验。对于Android开发者来说,理解和掌握这样的控件能...
"android 日期选择组件"通常指的是一个可以方便用户选择日期的UI控件,它通常包括对日、月和年的选择。在Android系统中,有多种方式实现这种功能,包括原生的DatePicker和自定义的第三方库。 原生的Android ...
在Android开发中,日历控件是一个非常常见且实用的组件,它可以帮助用户方便地查看和管理日期。"android 日历控件源码.rar"是一个包含Android日历控件源代码的压缩包,用于帮助开发者深入理解日历控件的工作原理,并...