- 浏览: 2148779 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 576本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1036颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 930从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1044Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 907Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 772前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 861监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 739在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 836最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1231##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1001当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 683setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1408问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 687底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1670点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1295import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2205TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1451一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 800Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 892最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
Android 日历方式显示的日期选择组件(日历控件之一)
可以同时显示日期加时间,或者只显示日期
单行横向滑动的日历控件,可设置起始结束日期
Android史上最全的日历控件,带有周数,超全,超漂亮,超炫丽的日历控件。
Android自定义组件之日历控件-精美日历实现(内容、样式可扩展),参考博客:http://blog.csdn.net/daijin888888/article/details/47752723
HTML5的日历控件,目前运用在利用HTML5开发的IOS和Android系统中,可扩展性好;控件支持各种日期事件,界面优
Android自定义组件之日历控件-精美日历实现(内容、样式可扩展)【更新版】,参考博客:http://blog.csdn.net/daijin888888/article/details/47752723
此项目源码已更新,请下载最新版本。 头文件列表: 1. CalendarMonthItem.h 2. CalendarMonthItemManager.h 3. CalendarButtons.h 4. CalendarTopPanel.h 5. ...13. CalendarYearItemManager.h
可折叠的日历控件Calendar;
Axure组件库 手绘组件库 Sketchy Axure Widgets.rplib Scoder Hand.ttf Android-Axure-Widgets Android.rplib iPhone-Axure-Widgets ipad.rplib iPhone-Bodies.rplib iPhone-Horizontal.rplib iPhone-UI.rplib Yahoo...
是 Android 平台的一个日历显示组件。 3、CWAC EndlessAdapter 是 Android 上一个可以无限往下滑进行列表数据加载的控件。 4、Android Horizontal ListView 是 Android 上一个水平滑动的 ListView 组件。 5、...
上下滑动可以在周视图和月视图之前切换,左右滑动可以切换日期。
本文实例为大家分享了Android日历控件的实现代码,供大家参考,具体内容如下 1、效果图: 2、弹窗Dialog:SelectDateDialog: public class SelectDateDialog { private static final String TAG = ...
包括手机端图标PC端控件日历等,产品经理必备组件库xure网页原型库,android原型库,iphone原型库,网页导航,网页搜索,网页常用图标,经典原型,导航条,日期控件等,Axure的原型控件,主要用于产品设计,包含类型...
第七章 使用日历控件选取日期 (iOS and Android) 76 7.1移动平台中的日历 76 7.2为用户更改的日期编写事件处理程序 78 第八章 组合框控件的使用 (iOS and Android) 81 8.1多设备应用程序中的选择器 81 8.2使用...
日期时间控件的用法(日期选择器、时间选择器)、列表类视图的用法(基本适配器、列表视图、网格视图)、翻页类视图的基本用法(翻页视图、翻页适配器、翻页标题栏)、碎片的用法(静态注册方式、动态注册方式、碎片...
Android-CalendarView.zip,Android上一个优雅、万能自定义UI、支持周视图、自定义周起始、性能高效的日历控件,支持热插拔实现的UI定制!支持标记、自定义颜色、农历、自定义月视图各种显示模式等。Canvas绘制,速度...
“日历”界面主要是在“我”界面弹出一个对话框,该对话框中显示详细的年、月、日、阴历、阳历、星期以及节假日信息,该界面的日历控件通过调用第三方的CalendarView库实现。
自定义日历控件,支持旧历、节气、日期标注、点击操作 (参考网络上的日历控件改写) 注:将下面的四张资源图片拷贝到所建包的下一个image目录中,如Calendar.java 所在包为 cc.util.android.view,则需要再创建一个...
日历查看Android平台上优雅的CalendarView。 用画布自由绘制UI,快速,高效和低内存。 支持月视图,周视图,年视图,自定义周开始,农历日历等。 热插拔UI定制! 您想不到日历如此优雅!AndroidStudio v3.5 +支持...