專案需要用到日曆控制項,這是我們的效果圖。
gradle 關聯
implementation 'com.haibin:calendarview:3.4.0'
使用剛開始布局中使用的話注意是有包名路徑的,如果直接是
使用的是系統自帶的日曆控制項。
"match_parent"
android:layout_height="wrap_content" />
複製**
自定義 monthview//取消日曆字型加粗
mcurmonthtextpaint.setfakeboldtext(false);
mothermonthtextpaint.setfakeboldtext(false);
複製**
這裡插個題外的知識點tip:setfakeboldtext(true)
的加粗效果比android:textstyle="bold"
屬性的加粗效果要弱點,就是不會太粗,又比細稍微粗一點的效果~ 了解一下
在ondrawtext
裡進行繪製,正常樣式的日曆可正常顯示時間的
@override
protected void ondrawtext(canvas canvas, calendar calendar, int x, int y, boolean hasscheme, boolean isselected)
複製**
這裡要分類下我們需要幾種型別的樣式:
1、不可完成的
2、可以完成的
3、今日已完成的
4、歷史已完成的
模擬資料,通過scheme 標記區分各樣式
calendar calendar1 = getschemecalendar(2018, 8, 11, "1");
calendar calendar2 = getschemecalendar(2018, 8, 12, "2");
calendar calendar3 = getschemecalendar(2018, 8, 13, "3");
calendar calendar4 = getschemecalendar(2018, 8, 6, "4");
map.put(calendar1.tostring(), calendar1);
map.put(calendar2.tostring(), calendar2);
map.put(calendar3.tostring(), calendar3);
map.put(calendar4.tostring(), calendar4);
calendarview.setschemedate(map);
private calendar getschemecalendar(int year, int month, int day, string text)
複製**
初始化兩個paint,有兩張資源的用bitmap去繪製
paint1.setcolor(contextcompat.getcolor(context, r.color.green));
paint1.settextsize(densityutil.sptopx(context, 13));
paint1.setstyle(paint.style.stroke);
paint1.setantialias(true);
paint1.settextalign(paint.align.center);
paint2.setcolor(contextcompat.getcolor(context, r.color.white));
paint2.settextsize(densityutil.sptopx(context, 13));
paint2.setantialias(true);
paint2.settextalign(paint.align.center);
daybgbitmap = bitmapfactory.decoderesource(getresources(), r.mipmap.day_bg);
daysuccessbitmap = bitmapfactory.decoderesource(getresources(), r.mipmap.day_success);
複製**
主要的方法 ondrawtext ,根據不同scheme 繪製各view
@override
protected void ondrawtext(canvas canvas, calendar calendar, int x, int y, boolean hasscheme, boolean isselected) else
if ("2".equals(calendar.getscheme())) else
if ("3".equals(calendar.getscheme())) else
if ("4".equals(calendar.getscheme())) else
}複製**
至此,檢視繪製完成。
接下來完成基本的api呼叫。
api 呼叫
初始化賦值當前的年月,日曆切換時,時間對應改變。
//初始化當前年月
tvmonth.settext(calendarview.getcuryear() + "年" + calendarview.getcurmonth() + "月");
//月份切換改變事件
calendarview.setonmonthchangelistener(new calendarview.onmonthchangelistener
() });
複製**
布局裡有個時間選擇器,用於選擇年月的,這裡採用的是 android-pickerview 時間選擇器。
//時間選擇器選擇年月,對應的日曆切換到指定日期
picker.setonclicklistener(new view.onclicklistener
() }).settype(type).build();
pvtime.show();
}});複製**
日期的選擇監聽事件
calendarview.setondateselectedlistener(new calendarview.ondateselectedlistener
() });
複製**
效果完成圖,當然不同專案裡的效果圖是不一樣的,只要會canvas的基本繪製都是可以達到各自想要的效果的。
歡迎關注我的部落格:blog.manjiexiang.cn/
推薦一款優雅的日曆控制項
專案需要用到日曆控制項,這是我們的效果圖。gradle 關聯 implementation com.haibin calendarview 3.4.0 使用 剛開始布局中使用的話注意是有包名路徑的,如果直接是使用的是系統自帶的日曆控制項。haibin calendarview calendarvie...
推薦一款優雅的日曆控制項
專案需要用到日曆控制項,這是我們的效果圖。gradle 關聯 implementation com.haibin calendarview 3.4.0 使用剛開始布局中使用的話注意是有包名路徑的,如果直接是使用的是系統自帶的日曆控制項。自定義 monthview 取消日曆字型加粗 mcurmonth...
推薦一款網遊
三月王朝 也叫帝國霸略 挺不錯的,優點 20 多人約好晚上一起打都城,很帶勁。qq飛車採用了世界級的物理引擎physx,採納專業車手的建議,手感全面超越市場領先產品。qq飛車完全免費,qq號碼即可登陸。專為qq使用者設計的時尚的人物造型,爽快的漂移快感,帥哥與美女同在,速度與激情並存,帶你進入眩目的...