推薦一款優雅的日曆控制項

2021-09-11 12:52:27 字數 3438 閱讀 9982

專案需要用到日曆控制項,這是我們的效果圖。

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使用者設計的時尚的人物造型,爽快的漂移快感,帥哥與美女同在,速度與激情並存,帶你進入眩目的...