Android 簽到打卡日曆,自定義日期可帶圖示(附原始碼)
前言
公司專案需要做一個簽到送積分的系統,要求app實現這種簽到功能。先在網上找了一些資料,有些用自定義View畫圖實現,其實對於普通碼農對繪圖會沒耐心看各自演算法。所以自己動手擼一個通用型日曆,使用ViewPager+Releteview+Calendar+演算法實現。想著這次也為了以後做其他專案中能用到,因為真心覺得很實用。
原始碼地址:http://download.csdn.net/detail/csdn_aiyang/9826739。
相關資料:
Java/Android 日期格式SimpleDateFormat轉換,以及Date和Calendar的使用
效果圖:
目錄
一、Calendar類(關鍵)
一款日曆App,肯定少不了要用到 Calendar類。
public class SpecialCalendar {
/**
* 判斷是否是閏年
*/
public boolean isLeapYear(int year){
if (year % 100 == 0 && year % 400 == 0){
return true;
}else if (year % 100 != 0 && year % 4==0){
return true;
}
return false;
}
/**
* 得到某月多少天
* 哈哈少兒口訣:1357810臘三十一天永不差,469冬三十日平年二月28,閏年再把一天加。
*/
public int getDaysOfMonth(boolean isLeapYear,int month){
int days=0;
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if (isLeapYear){
days=29;
}else{
days=28;
}
}
return days;
}
/**
* 得到某年某月一號是星期幾 (0-6 日-六)
*/
public int getWeekdayOfMonth( int mYear, int mMonth){
Calendar cal=Calendar.getInstance();
cal.set(mYear,mMonth,1);
return cal.get(Calendar.DAY_OF_WEEK)-1;
}
}
二、BaseAdapter中做資料
1、先在activity中初始化一下下小資料:
Calendar calendar=Calendar.getInstance();
mYear = calendar.get(Calendar.YEAR); // 獲取當前年份
mMonth = calendar.get(Calendar.MONTH) ;// 獲取當前月份以(0開頭)
mDay = calendar.get(Calendar.DAY_OF_MONTH) ;// 獲取當前天以(0開頭)
SpecialCalendar mCalendar=new SpecialCalendar();//建立自己寫的日曆類 獲取某月總天數 和 一號是星期幾
boolean isLeapYear =mCalendar.isLeapYear(mYear);
int mDays=mCalendar.getDaysOfMonth(isLeapYear,mMonth+1);
int week =mCalendar.getWeekdayOfMonth(mYear,mMonth);
adapter=new RegistrationAdapter(this,mDays,week,mDay);//介面卡帶參構造實現
Calendar calendar=Calendar.getInstance();
mYear = calendar.get(Calendar.YEAR); // 獲取當前年份
mMonth = calendar.get(Calendar.MONTH) ;// 獲取當前月份以(0開頭)
mDay = calendar.get(Calendar.DAY_OF_MONTH) ;// 獲取當前天以(0開頭)
SpecialCalendar mCalendar=new SpecialCalendar();//建立自己寫的日曆類 獲取某月總天數 和 一號是星期幾
boolean isLeapYear =mCalendar.isLeapYear(mYear);
int mDays=mCalendar.getDaysOfMonth(isLeapYear,mMonth+1);
int week =mCalendar.getWeekdayOfMonth(mYear,mMonth);
adapter=new RegistrationAdapter(this,mDays,week,mDay);//介面卡帶參構造實現
2、介面卡關鍵的小小演算法:
private final int days;
private final int week;
private int[] dayNumber;
private final int day;
/**
* 得到42格子 每一格子的值
*/
private void getEveryDay(){
dayNumber=new int[42];//總共42個方塊格子
for (int i=0;i<42;i++){
if (i < days+week && i >= week){//這麼解釋:第一行共7格子和星期的7天 做計算 i>=week 意思是從第一個方塊格開始往dayNumber裡放幾號
dayNumber[i]=i-week+1;
}else{
dayNumber[i]=0;//不是這個月內每一號1..10..31所賦值的,則全部賦值為0 ;方便點選時判斷值是不是為0,是的話說明點的空白格子了
}
}
}
三、總結
程式碼很簡單,思路也很容易理解。如果不懂也沒關係,可以直接進群或留言,我會耐心解答。
可以根據你們公司的“產品”設計圖的具體業務邏輯去擴充套件實現,~~ 總之,核心程式碼就是以上部分 。
如果看官們懶得手打程式碼,當然也可以下載的我的簽到demo,這樣使用時程式碼可以直接複製到實際專案中。
沒有積分下載的朋友可以加群索要,歡迎入群!
相關文章
- iOS 自定義日曆(日期選擇)控制元件iOS控制元件
- Android自定義預定日曆,並且顯示陰曆Android
- 小程式-日曆簽到
- Vue日曆的編寫,可顯示周和月的模式(其中可以自定義日曆裡內容的顯示)Vue模式
- 點選日曆顯示日期jqueryjQuery
- Win10系統日曆應用顯示農曆日期的方法【圖文】Win10
- 【例項】PowerQuery的自定義日曆
- MUI DtPicker 顯示自定義日期UI
- 直播商城原始碼,密碼輸入框自定義顯示隱藏圖示原始碼密碼
- app直播原始碼,el-button自定義圖片顯示APP原始碼
- 微信小程式實現簽到的日曆微信小程式
- 微信小程式 vue 自定義日曆 sku微信小程式Vue
- Flutter日曆,可以自定義風格UIFlutterUI
- 如何寫一個拖拽日曆元件(附原始碼)元件原始碼
- Android 自定義帶動畫的柱狀圖Android動畫
- 直播軟體原始碼,自定義修改原本已有的圖示原始碼
- 直播原始碼開發,el-button自定義圖片顯示原始碼
- 直播平臺原始碼,el-button自定義圖片顯示原始碼
- 短視訊帶貨原始碼,android 自定義常駐通知欄原始碼Android
- 自定義圖示列表
- 自定義view之實現日曆介面(一)View
- 自定義view之實現日曆介面(二)View
- HTML5自定義日曆控制元件HTML控制元件
- android動態許可權到自定義許可權框架Android框架
- android 自定義帶動畫的統計餅圖Android動畫
- 實現陽曆和農曆顯示日期的javascript程式碼JavaScript
- Android自定義日曆控制元件的實現過程詳解Android控制元件
- RN自定義元件封裝 – 拖拽選擇日期的日曆元件封裝
- RN自定義元件封裝 - 拖拽選擇日期的日曆元件封裝
- 關於日曆程式原始碼原始碼
- Calendar -『為移動端而生』的自定義日曆
- 自定義 RMAN 顯示的日期時間格式
- [iOS] [OC] NSNotificationCenter 進階及自定義(附原始碼)iOS原始碼
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- 公曆日期轉農曆日期
- Win10如何自定義硬碟圖示_win10自定義硬碟圖示的教程Win10硬碟
- 自定義View之簽到足跡控制元件View控制元件
- css自定義滑鼠指標圖示程式碼例項CSS指標