欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android使用GridView實現(xiàn)日歷功能示例(詳細(xì)代碼)

 更新時間:2024年06月13日 14:31:18   作者:limengwe  
本篇文章主要介紹了Android使用GridView實現(xiàn)日歷功能示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧

Android使用GridView實現(xiàn)日歷功能示例,代碼有點多,發(fā)個圖先:

如果懶得往下看的,可以直接下載源碼吧,最近一直有人要,由于時間太久了,懶得找出來整理,今天又看到有人要,正好沒事就整理了一下

源碼下載。。。。

布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:orientation="vertical" > 
 
 <LinearLayout 
  android:id="@+id/lay_title" 
  style="@style/TitleStyle" 
  android:layout_width="fill_parent" > 
 
  <TextView 
   android:id="@+id/btn_back" 
   style="@style/TitleLeftButtonStyle" /> 
 
  <TextView 
   android:id="@+id/tv_top" 
   style="@style/TitleMiddleTextStyle" 
   android:text="請選擇日期" /> 
 
  <TextView 
   android:id="@+id/btn_goback_to_today" 
   style="@style/TitleRightButtonStyle" 
   android:text="今天" /> 
 </LinearLayout> 
 
 <LinearLayout 
  android:layout_width="fill_parent" 
  android:layout_height="53.0dip" 
  android:background="#ff394147" 
  android:gravity="center_vertical" > 
 
  <LinearLayout 
   android:id="@+id/btn_prev_month" 
   android:layout_width="0.0dip" 
   android:layout_height="fill_parent" 
   android:layout_weight="0.2" 
   android:gravity="center" 
   android:orientation="vertical" > 
 
   <TextView 
    android:id="@+id/left_img" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/triangle06_states" 
    android:duplicateParentState="true" 
    android:text="" 
    android:textSize="16.0dip" /> 
  </LinearLayout> 
 
  <LinearLayout 
   android:layout_width="0.0dip" 
   android:layout_height="fill_parent" 
   android:layout_weight="0.6" 
   android:gravity="center" 
   android:orientation="vertical" > 
 
   <TextView 
    android:id="@+id/tv_month" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="xxxx年14月" 
    android:textColor="#ffffffff" 
    android:textSize="21.0dip" /> 
  </LinearLayout> 
 
  <LinearLayout 
   android:id="@+id/btn_next_month" 
   android:layout_width="0.0dip" 
   android:layout_height="fill_parent" 
   android:layout_weight="0.2" 
   android:gravity="center" 
   android:orientation="vertical" > 
 
   <TextView 
    android:id="@+id/right_img" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/triangle05_states" 
    android:duplicateParentState="true" 
    android:text="" 
    android:textSize="16.0dip" /> 
  </LinearLayout> 
 </LinearLayout> 
 <LinearLayout 
  android:layout_width="fill_parent" 
  android:layout_height="22.0dip" 
  android:background="#ff8091a8" > 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周日" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周一" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周二" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周三" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周四" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周五" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 
  <TextView 
   android:layout_width="0.0dip" 
   android:layout_height="wrap_content" 
   android:layout_gravity="center" 
   android:layout_weight="1.0" 
   android:gravity="center" 
   android:text="周六" 
   android:textColor="#ffffffff" 
   android:textSize="14.0dip" /> 
 </LinearLayout> 
 <GridView 
  android:id="@+id/gridview" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:background="#00000000" 
  android:clickable="true" 
  android:clipChildren="true" 
  android:columnWidth="55.0dip" 
  android:horizontalSpacing="1.0dip" 
  android:listSelector="@null" 
  android:numColumns="7" 
  android:paddingBottom="1.0dip" 
  android:stretchMode="columnWidth" 
  android:verticalSpacing="1.0dip" /> 
 
</LinearLayout> 

Item:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:background="#FFFFFF" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"> 
 
 <TextView 
  android:gravity="center" 
  android:layout_width="46dp" 
  android:layout_height="55dp" 
  android:id="@+id/tvtext" 
  /> 
</LinearLayout>

Adapter:

/** 
 * 日歷gridview中的每一個item顯示的textview 
 * @author lmw 
 * 
 */ 
public class CalendarAdapter extends BaseAdapter { 
 private boolean isLeapyear = false; //是否為閏年 
 private int daysOfMonth = 0;  //某月的天數(shù) 
 private int dayOfWeek = 0;  //具體某一天是星期幾 
 private int lastDaysOfMonth = 0; //上一個月的總天數(shù) 
 private Context context; 
 private String[] dayNumber = new String[42]; //一個gridview中的日期存入此數(shù)組中 
// private static String week[] = {"周日","周一","周二","周三","周四","周五","周六"}; 
 private SpecialCalendar sc = null; 
 private LunarCalendar lc = null; 
 private Resources res = null; 
 private Drawable drawable = null; 
  
 private String currentYear = ""; 
 private String currentMonth = ""; 
 private String currentDay = ""; 
  
 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); 
 private int currentFlag = -1;  //用于標(biāo)記當(dāng)天 
 private int[] schDateTagFlag = null; //存儲當(dāng)月所有的日程日期 
  
 private String showYear = ""; //用于在頭部顯示的年份 
 private String showMonth = ""; //用于在頭部顯示的月份 
 private String animalsYear = ""; 
 private String leapMonth = ""; //閏哪一個月 
 private String cyclical = ""; //天干地支 
 //系統(tǒng)當(dāng)前時間 
 private String sysDate = ""; 
 private String sys_year = ""; 
 private String sys_month = ""; 
 private String sys_day = ""; 
  
 public CalendarAdapter(){ 
  Date date = new Date(); 
  sysDate = sdf.format(date); //當(dāng)期日期 
  sys_year = sysDate.split("-")[0]; 
  sys_month = sysDate.split("-")[1]; 
  sys_day = sysDate.split("-")[2]; 
   
 } 
  
 public CalendarAdapter(Context context,Resources rs,int jumpMonth,int jumpYear,int year_c,int month_c,int day_c){ 
  this(); 
  this.context= context; 
  sc = new SpecialCalendar(); 
  lc = new LunarCalendar(); 
  this.res = rs; 
   
  int stepYear = year_c+jumpYear; 
  int stepMonth = month_c+jumpMonth ; 
  if(stepMonth > 0){ 
   //往下一個月滑動 
   if(stepMonth%12 == 0){ 
    stepYear = year_c + stepMonth/12 -1; 
    stepMonth = 12; 
   }else{ 
    stepYear = year_c + stepMonth/12; 
    stepMonth = stepMonth%12; 
   } 
  }else{ 
   //往上一個月滑動 
   stepYear = year_c - 1 + stepMonth/12; 
   stepMonth = stepMonth%12 + 12; 
   if(stepMonth%12 == 0){ 
     
   } 
  } 
  
  currentYear = String.valueOf(stepYear);; //得到當(dāng)前的年份 
  currentMonth = String.valueOf(stepMonth); //得到本月 (jumpMonth為滑動的次數(shù),每滑動一次就增加一月或減一月) 
  currentDay = String.valueOf(day_c); //得到當(dāng)前日期是哪天 
   
  getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth)); 
   
 } 
  
 public CalendarAdapter(Context context,Resources rs,int year, int month, int day){ 
  this(); 
  this.context= context; 
  sc = new SpecialCalendar(); 
  lc = new LunarCalendar(); 
  this.res = rs; 
  currentYear = String.valueOf(year);; //得到跳轉(zhuǎn)到的年份 
  currentMonth = String.valueOf(month); //得到跳轉(zhuǎn)到的月份 
  currentDay = String.valueOf(day); //得到跳轉(zhuǎn)到的天 
   
  getCalendar(Integer.parseInt(currentYear),Integer.parseInt(currentMonth)); 
   
 } 
  
 @Override 
 public int getCount() { 
  // TODO Auto-generated method stub 
  return dayNumber.length; 
 } 
 
 @Override 
 public Object getItem(int position) { 
  // TODO Auto-generated method stub 
  return position; 
 } 
 
 @Override 
 public long getItemId(int position) { 
  // TODO Auto-generated method stub 
  return position; 
 } 
 
 @Override 
 public View getView(int position, View convertView, ViewGroup parent) { 
 
  if(convertView == null){ 
   convertView = LayoutInflater.from(context).inflate(R.layout.calendar_item, null); 
   } 
  TextView textView = (TextView) convertView.findViewById(R.id.tvtext); 
  String d = dayNumber[position].split("\\.")[0]; 
  String dv = dayNumber[position].split("\\.")[1]; 
 
  SpannableString sp = new SpannableString(d+"\n"+dv); 
  sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
  sp.setSpan(new RelativeSizeSpan(1.2f) , 0, d.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
  if(dv != null ||dv != ""){ 
   sp.setSpan(new RelativeSizeSpan(0.75f), d.length()+1, dayNumber[position].length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
  } 
//  sp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 14, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) 
  textView.setText(sp); 
  textView.setTextColor(Color.GRAY); 
   
//  if(position<7){ 
//   //設(shè)置周 
//   textView.setTextColor(Color.WHITE); 
//   textView.setBackgroundColor(color.search_txt_color); 
//   textView.setTextSize(14); 
//  } 
   
  if (position < daysOfMonth + dayOfWeek && position >= dayOfWeek) { 
   // 當(dāng)前月信息顯示 
   textView.setTextColor(Color.BLACK);// 當(dāng)月字體設(shè)黑 
   drawable = res.getDrawable(R.drawable.current_day_bgc); 
 
  } 
  if(schDateTagFlag != null && schDateTagFlag.length >0){ 
   for(int i = 0; i < schDateTagFlag.length; i++){ 
    if(schDateTagFlag[i] == position){ 
     //設(shè)置日程標(biāo)記背景 
     textView.setBackgroundResource(R.drawable.mark); 
    } 
   } 
  } 
  if(currentFlag == position){ 
   //設(shè)置當(dāng)天的背景 
   drawable = res.getDrawable(R.drawable.current_day_bgc); 
   textView.setBackgroundDrawable(drawable); 
   textView.setTextColor(Color.WHITE); 
  } 
  return convertView; 
 } 
  
 //得到某年的某月的天數(shù)且這月的第一天是星期幾 
 public void getCalendar(int year, int month){ 
  isLeapyear = sc.isLeapYear(year);    //是否為閏年 
  daysOfMonth = sc.getDaysOfMonth(isLeapyear, month); //某月的總天數(shù) 
  dayOfWeek = sc.getWeekdayOfMonth(year, month);  //某月第一天為星期幾 
  lastDaysOfMonth = sc.getDaysOfMonth(isLeapyear, month-1); //上一個月的總天數(shù) 
  Log.d("DAY", isLeapyear+" ====== "+daysOfMonth+" ============ "+dayOfWeek+" ========= "+lastDaysOfMonth); 
  getweek(year,month); 
 } 
  
 //將一個月中的每一天的值添加入數(shù)組dayNuber中 
 private void getweek(int year, int month) { 
  int j = 1; 
  int flag = 0; 
  String lunarDay = ""; 
   
  //得到當(dāng)前月的所有日程日期(這些日期需要標(biāo)記) 
 
  for (int i = 0; i < dayNumber.length; i++) { 
   // 周一 
//   if(i<7){ 
//    dayNumber[i]=week[i]+"."+" "; 
//   } 
    if(i < dayOfWeek){ //前一個月 
    int temp = lastDaysOfMonth - dayOfWeek+1; 
    lunarDay = lc.getLunarDate(year, month-1, temp+i,false); 
    dayNumber[i] = (temp + i)+"."+lunarDay; 
   }else if(i < daysOfMonth + dayOfWeek){ //本月 
    String day = String.valueOf(i-dayOfWeek+1); //得到的日期 
    lunarDay = lc.getLunarDate(year, month, i-dayOfWeek+1,false); 
    dayNumber[i] = i-dayOfWeek+1+"."+lunarDay; 
    //對于當(dāng)前月才去標(biāo)記當(dāng)前日期 
    if(sys_year.equals(String.valueOf(year)) && sys_month.equals(String.valueOf(month)) && sys_day.equals(day)){ 
     //標(biāo)記當(dāng)前日期 
     currentFlag = i; 
    }  
    setShowYear(String.valueOf(year)); 
    setShowMonth(String.valueOf(month)); 
    setAnimalsYear(lc.animalsYear(year)); 
    setLeapMonth(lc.leapMonth == 0?"":String.valueOf(lc.leapMonth)); 
    setCyclical(lc.cyclical(year)); 
   }else{ //下一個月 
    lunarDay = lc.getLunarDate(year, month+1, j,false); 
    dayNumber[i] = j+"."+lunarDay; 
    j++; 
   } 
  } 
   
  String abc = ""; 
  for(int i = 0; i < dayNumber.length; i++){ 
    abc = abc+dayNumber[i]+":"; 
  } 
  Log.d("DAYNUMBER",abc); 
 
 
 } 
  
  
 public void matchScheduleDate(int year, int month, int day){ 
   
 } 
  
 /** 
  * 點擊每一個item時返回item中的日期 
  * @param position 
  * @return 
  */ 
 public String getDateByClickItem(int position){ 
  return dayNumber[position]; 
 } 
  
 /** 
  * 在點擊gridView時,得到這個月中第一天的位置 
  * @return 
  */ 
 public int getStartPositon(){ 
  return dayOfWeek+7; 
 } 
  
 /** 
  * 在點擊gridView時,得到這個月中最后一天的位置 
  * @return 
  */ 
 public int getEndPosition(){ 
  return (dayOfWeek+daysOfMonth+7)-1; 
 } 
  
 public String getShowYear() { 
  return showYear; 
 } 
 
 public void setShowYear(String showYear) { 
  this.showYear = showYear; 
 } 
 
 public String getShowMonth() { 
  return showMonth; 
 } 
 
 public void setShowMonth(String showMonth) { 
  this.showMonth = showMonth; 
 } 
  
 public String getAnimalsYear() { 
  return animalsYear; 
 } 
 
 public void setAnimalsYear(String animalsYear) { 
  this.animalsYear = animalsYear; 
 } 
  
 public String getLeapMonth() { 
  return leapMonth; 
 } 
 
 public void setLeapMonth(String leapMonth) { 
  this.leapMonth = leapMonth; 
 } 
  
 public String getCyclical() { 
  return cyclical; 
 } 
 
 public void setCyclical(String cyclical) { 
  this.cyclical = cyclical; 
 } 
} 

計算類

import java.util.Calendar; 
 
public class SpecialCalendar { 
 
 private int daysOfMonth = 0;  //某月的天數(shù) 
 private int dayOfWeek = 0;  //具體某一天是星期幾 
 
  
  
  
 // 判斷是否為閏年 
 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; 
 } 
 
 //得到某月有多少天數(shù) 
 public int getDaysOfMonth(boolean isLeapyear, int month) { 
  switch (month) { 
  case 1: 
  case 3: 
  case 5: 
  case 7: 
  case 8: 
  case 10: 
  case 12: 
   daysOfMonth = 31; 
   break; 
  case 4: 
  case 6: 
  case 9: 
  case 11: 
   daysOfMonth = 30; 
   break; 
  case 2: 
   if (isLeapyear) { 
    daysOfMonth = 29; 
   } else { 
    daysOfMonth = 28; 
   } 
 
  } 
  return daysOfMonth; 
 } 
  
 //指定某年中的某月的第一天是星期幾 
 public int getWeekdayOfMonth(int year, int month){ 
  Calendar cal = Calendar.getInstance(); 
  cal.set(year, month-1, 1); 
  dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1; 
  return dayOfWeek; 
 } 
  
  
} 

節(jié)日和陰歷計算類

關(guān)于日歷實現(xiàn)代碼里0x04bd8, 0x04ae0, 0x0a570的解釋:

new Array(
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,
0x14b63);

正確的解釋是:

 二進制形式

xxxx xxxx xxxx xxxx xxxx
20-17 16-12 12-9 8-5 4-1 

1-4: 表示當(dāng)年有無閏年,有的話,為閏月的月份,沒有的話,為0。

5-16:為除了閏月外的正常月份是大月還是小月,1為30天,0為29天。

            注意:從1月到12月對應(yīng)的是第16位到第5位。

17-20: 表示閏月是大月還是小月,僅當(dāng)存在閏月的情況下有意義。

舉個例子:

1980年的數(shù)據(jù)是: 0x095b0

二進制:0000    1001 0101 1011 0000

 表示1980年沒有閏月,從1月到12月的天數(shù)依次為:30、29、29、30 、29、30、29、30、 30、29、30、30。

1982年的數(shù)據(jù)是:0x0a974

0000 1010 0 1001 0111 0100

表示1982年的4月為閏月,即有第二個4月,且是閏小月。

從1月到13月的天數(shù)依次為:30、29、30、29、 29(閏月)、 30、29、29、30、 29、30、30、30。

public class LunarCalendar { 
 private int year; //農(nóng)歷的年份 
 private int month; 
 private int day; 
 private String lunarMonth; //農(nóng)歷的月份 
 private boolean leap; 
 public int leapMonth = 0; //閏的是哪個月 
  
 final static String chineseNumber[] = { "一", "二", "三", "四", "五", "六", "七", 
   "八", "九", "十", "十一", "十二" }; 
 static SimpleDateFormat chineseDateFormat = new SimpleDateFormat( 
   "yyyy年MM月dd日"); 
 final static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570, 
   0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 
   0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 
   0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 
   0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 
   0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 
   0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 
   0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 
   0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 
   0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 
   0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 
   0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 
   0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 
   0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 
   0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 
   0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 
   0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 
   0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 
   0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 
   0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 
   0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 
   0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; 
 
 //農(nóng)歷部分假日 
 final static String[] lunarHoliday = new String[]{ 
          "0101 春節(jié)", 
          "0115 元宵", 
          "0505 端午", 
          "0707 七夕情人", 
          "0715 中元", 
          "0815 中秋", 
          "0909 重陽", 
          "1208 臘八", 
          "1224 小年", 
          "0100 除夕" 
 }; 
  
 //公歷部分節(jié)假日 
 final static String[] solarHoliday = new String[]{ 
          "0101 元旦", 
          "0214 情人", 
          "0308 婦女", 
          "0312 植樹", 
          "0315 消費者權(quán)益日", 
          "0401 愚人", 
          "0501 勞動", 
          "0504 青年", 
          "0512 護士", 
          "0601 兒童", 
          "0701 建黨", 
          "0801 建軍", 
          "0808 父親", 
          "0910 教師", 
          "1001 國慶", 
          "1024 聯(lián)合國日", 
          "1225 圣誕"
 }; 
  
 // ====== 傳回農(nóng)歷 y年的總天數(shù) 
 final private static int yearDays(int y) { 
  int i, sum = 348; 
  for (i = 0x8000; i > 0x8; i >>= 1) { 
   if ((lunarInfo[y - 1900] & i) != 0) 
    sum += 1; 
  } 
  return (sum + leapDays(y)); 
 } 
 
 // ====== 傳回農(nóng)歷 y年閏月的天數(shù) 
 final private static int leapDays(int y) { 
  if (leapMonth(y) != 0) { 
   if ((lunarInfo[y - 1900] & 0x10000) != 0) 
    return 30; 
   else 
    return 29; 
  } else 
   return 0; 
 } 
 
 // ====== 傳回農(nóng)歷 y年閏哪個月 1-12 , 沒閏傳回 0 
 final private static int leapMonth(int y) { 
  return (int) (lunarInfo[y - 1900] & 0xf); 
 } 
 
 // ====== 傳回農(nóng)歷 y年m月的總天數(shù) 
 final private static int monthDays(int y, int m) { 
  if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) 
   return 29; 
  else 
   return 30; 
 } 
 
 // ====== 傳回農(nóng)歷 y年的生肖 
 final public String animalsYear(int year) { 
  final String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龍", "蛇", 
    "馬", "羊", "猴", "雞", "狗", "豬" }; 
  return Animals[(year - 4) % 12]; 
 } 
 
 // ====== 傳入 月日的offset 傳回干支, 0=甲子 
 final private static String cyclicalm(int num) { 
  final String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", 
    "辛", "壬", "癸" }; 
  final String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", 
    "未", "申", "酉", "戌", "亥" }; 
  return (Gan[num % 10] + Zhi[num % 12]); 
 } 
 
 // ====== 傳入 offset 傳回干支, 0=甲子 
 final public String cyclical(int year) { 
  int num = year - 1900 + 36; 
  return (cyclicalm(num)); 
 } 
 
 public static String getChinaDayString(int day) { 
  String chineseTen[] = { "初", "十", "廿", "卅" }; 
  int n = day % 10 == 0 ? 9 : day % 10 - 1; 
  if (day > 30) 
   return ""; 
  if (day == 10) 
   return "初十"; 
  else 
   return chineseTen[day / 10] + chineseNumber[n]; 
 } 
 
 /** */ 
 /** 
  * 傳出y年m月d日對應(yīng)的農(nóng)歷. yearCyl3:農(nóng)歷年與1864的相差數(shù) ? monCyl4:從1900年1月31日以來,閏月數(shù) 
  * dayCyl5:與1900年1月31日相差的天數(shù),再加40 ? 
  * 
  * isday: 這個參數(shù)為false---日期為節(jié)假日時,陰歷日期就返回節(jié)假日 ,true---不管日期是否為節(jié)假日依然返回這天對應(yīng)的陰歷日期 
  * @param cal 
  * @return 
  */ 
 public String getLunarDate(int year_log, int month_log, int day_log, boolean isday) { 
  // @SuppressWarnings("unused") 
  int yearCyl, monCyl, dayCyl; 
  //int leapMonth = 0; 
  String nowadays; 
  Date baseDate = null; 
  Date nowaday = null; 
  try { 
   baseDate = chineseDateFormat.parse("1900年1月31日"); 
  } catch (ParseException e) { 
   e.printStackTrace(); // To change body of catch statement use 
   // Options | File Templates. 
  } 
 
  nowadays = year_log + "年" + month_log + "月" + day_log + "日"; 
  try { 
   nowaday = chineseDateFormat.parse(nowadays); 
  } catch (ParseException e) { 
   e.printStackTrace(); // To change body of catch statement use 
   // Options | File Templates. 
  } 
 
  // 求出和1900年1月31日相差的天數(shù) 
  int offset = (int) ((nowaday.getTime() - baseDate.getTime()) / 86400000L); 
  dayCyl = offset + 40; 
  monCyl = 14; 
 
  // 用offset減去每農(nóng)歷年的天數(shù) 
  // 計算當(dāng)天是農(nóng)歷第幾天 
  // i最終結(jié)果是農(nóng)歷的年份 
  // offset是當(dāng)年的第幾天 
  int iYear, daysOfYear = 0; 
  for (iYear = 1900; iYear < 10000 && offset > 0; iYear++) { 
   daysOfYear = yearDays(iYear); 
   offset -= daysOfYear; 
   monCyl += 12; 
  } 
  if (offset < 0) { 
   offset += daysOfYear; 
   iYear--; 
   monCyl -= 12; 
  } 
  // 農(nóng)歷年份 
  year = iYear; 
  setYear(year); //設(shè)置公歷對應(yīng)的農(nóng)歷年份 
   
  yearCyl = iYear - 1864; 
  leapMonth = leapMonth(iYear); // 閏哪個月,1-12 
  leap = false; 
 
  // 用當(dāng)年的天數(shù)offset,逐個減去每月(農(nóng)歷)的天數(shù),求出當(dāng)天是本月的第幾天 
  int iMonth, daysOfMonth = 0; 
  for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { 
   // 閏月 
   if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) { 
    --iMonth; 
    leap = true; 
    daysOfMonth = leapDays(year); 
   } else 
    daysOfMonth = monthDays(year, iMonth); 
 
   offset -= daysOfMonth; 
   // 解除閏月 
   if (leap && iMonth == (leapMonth + 1)) 
    leap = false; 
   if (!leap) 
    monCyl++; 
  } 
  // offset為0時,并且剛才計算的月份是閏月,要校正 
  if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { 
   if (leap) { 
    leap = false; 
   } else { 
    leap = true; 
    --iMonth; 
    --monCyl; 
   } 
  } 
  // offset小于0時,也要校正 
  if (offset < 0) { 
   offset += daysOfMonth; 
   --iMonth; 
   --monCyl; 
  } 
  month = iMonth; 
  setLunarMonth(chineseNumber[month - 1] + "月"); //設(shè)置對應(yīng)的陰歷月份 
  day = offset + 1; 
 
  if(!isday){ 
   //如果日期為節(jié)假日則陰歷日期則返回節(jié)假日 
   //setLeapMonth(leapMonth); 
   for(int i = 0; i < solarHoliday.length; i++){ 
    //返回公歷節(jié)假日名稱 
    String sd = solarHoliday[i].split(" ")[0]; //節(jié)假日的日期 
    String sdv = solarHoliday[i].split(" ")[1]; //節(jié)假日的名稱 
    String smonth_v = month_log+""; 
    String sday_v = day_log+""; 
    String smd = ""; 
    if(month_log < 10){ 
     smonth_v = "0"+month_log; 
    } 
    if(day_log < 10){ 
     sday_v = "0"+day_log; 
    } 
    smd = smonth_v+sday_v; 
    if(sd.trim().equals(smd.trim())){ 
     return sdv; 
    } 
   } 
    
   for(int i = 0; i < lunarHoliday.length; i++){ 
    //返回農(nóng)歷節(jié)假日名稱 
    String ld =lunarHoliday[i].split(" ")[0]; //節(jié)假日的日期 
    String ldv = lunarHoliday[i].split(" ")[1]; //節(jié)假日的名稱 
    String lmonth_v = month+""; 
    String lday_v = day+""; 
    String lmd = ""; 
    if(month < 10){ 
     lmonth_v = "0"+month; 
    } 
    if(day < 10){ 
     lday_v = "0"+day; 
    } 
    lmd = lmonth_v+lday_v; 
    if(ld.trim().equals(lmd.trim())){ 
     return ldv;   
    } 
   } 
  } 
  if (day == 1) 
   return chineseNumber[month - 1] + "月"; 
  else 
   return getChinaDayString(day); 
 
 } 
 
  
 public String toString() { 
  if (chineseNumber[month - 1] == "一" && getChinaDayString(day) == "初一") 
   return "農(nóng)歷" + year + "年"; 
  else if (getChinaDayString(day) == "初一") 
   return chineseNumber[month - 1] + "月"; 
  else 
   return getChinaDayString(day); 
  // return year + "年" + (leap ? "閏" : "") + chineseNumber[month - 1] + 
  // "月" + getChinaDayString(day); 
 } 
  
 /*public static void main(String[] args) { 
  System.out.println(new LunarCalendar().getLunarDate(2012, 1, 23)); 
 }*/ 
  
 public int getLeapMonth() { 
  return leapMonth; 
 } 
 
 public void setLeapMonth(int leapMonth) { 
  this.leapMonth = leapMonth; 
 } 
  
 /** 
  * 得到當(dāng)前日期對應(yīng)的陰歷月份 
  * @return 
  */ 
 public String getLunarMonth() { 
  return lunarMonth; 
 } 
  
 public void setLunarMonth(String lunarMonth) { 
  this.lunarMonth = lunarMonth; 
 } 
  
 /** 
  * 得到當(dāng)前年對應(yīng)的農(nóng)歷年份 
  * @return 
  */ 
 public int getYear() { 
  return year; 
 } 
 
 public void setYear(int year) { 
  this.year = year; 
 } 
} 

Activity

/** 
 * 日歷顯示activity 
 * 
 * 
 */ 
public class CalendarActivity extends Activity implements OnGestureListener { 
 
 private GestureDetector gestureDetector = null; 
 private CalendarAdapter calV = null; 
 private GridView gridView = null; 
 private TextView topText = null; 
 private static int jumpMonth = 0;  //每次滑動,增加或減去一個月,默認(rèn)為0(即顯示當(dāng)前月) 
 private static int jumpYear = 0;  //滑動跨越一年,則增加或者減去一年,默認(rèn)為0(即當(dāng)前年) 
 private int year_c = 0; 
 private int month_c = 0; 
 private int day_c = 0; 
 private String currentDate = ""; 
 private Bundle bd=null;//發(fā)送參數(shù) 
 private Bundle bun=null;//接收參數(shù) 
 private String ruzhuTime; 
 private String lidianTime; 
 private String state=""; 
  
 public CalendarActivity() { 
 
  Date date = new Date(); 
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); 
  currentDate = sdf.format(date); //當(dāng)期日期 
  year_c = Integer.parseInt(currentDate.split("-")[0]); 
  month_c = Integer.parseInt(currentDate.split("-")[1]); 
  day_c = Integer.parseInt(currentDate.split("-")[2]); 
   
   
 } 
 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  ActivityList.activityList.add(this); 
  setContentView(R.layout.calendar); 
  bd=new Bundle();//out 
  bun=getIntent().getExtras();//in 
   
   
   if(bun!=null&&bun.getString("state").equals("ruzhu")) 
   { 
   state=bun.getString("state"); 
   System.out.println("%%%%%%"+state); 
   }else if(bun!=null&&bun.getString("state").equals("lidian")){ 
    
   state=bun.getString("state"); 
   System.out.println("|||||||||||"+state); 
   } 
   
  gestureDetector = new GestureDetector(this); 
//  bd=new Bundle(); 
  calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c); 
  addGridView(); 
  gridView.setAdapter(calV); 
   
  topText = (TextView) findViewById(R.id.tv_month); 
  addTextToTopTextView(topText); 
  
 } 
  
 @Override 
 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
   float velocityY) { 
  int gvFlag = 0;   //每次添加gridview到viewflipper中時給的標(biāo)記 
  if (e1.getX() - e2.getX() > 120) { 
   //像左滑動 
   addGridView(); //添加一個gridView 
   jumpMonth++;  //下一個月 
    
   calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c); 
   gridView.setAdapter(calV); 
   addTextToTopTextView(topText); 
   gvFlag++; 
  
   return true; 
  } else if (e1.getX() - e2.getX() < -120) { 
   //向右滑動 
   addGridView(); //添加一個gridView 
   jumpMonth--;  //上一個月 
    
   calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c); 
   gridView.setAdapter(calV); 
   gvFlag++; 
   addTextToTopTextView(topText); 
 
   return true; 
  } 
  return false; 
 } 
  
  
 /** 
  * 創(chuàng)建菜單 
  */ 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 
  menu.add(0, menu.FIRST, menu.FIRST, "今天"); 
  return super.onCreateOptionsMenu(menu); 
 } 
  
 /** 
  * 選擇菜單 
  */ 
 @Override 
 public boolean onMenuItemSelected(int featureId, MenuItem item) { 
  switch (item.getItemId()){ 
  case Menu.FIRST: 
   //跳轉(zhuǎn)到今天 
   int xMonth = jumpMonth; 
   int xYear = jumpYear; 
   int gvFlag =0; 
   jumpMonth = 0; 
   jumpYear = 0; 
   addGridView(); //添加一個gridView 
   year_c = Integer.parseInt(currentDate.split("-")[0]); 
   month_c = Integer.parseInt(currentDate.split("-")[1]); 
   day_c = Integer.parseInt(currentDate.split("-")[2]); 
   calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c); 
   gridView.setAdapter(calV); 
   addTextToTopTextView(topText); 
   gvFlag++; 
 
   break; 
  } 
  return super.onMenuItemSelected(featureId, item); 
 } 
  
 @Override 
 public boolean onTouchEvent(MotionEvent event) { 
 
  return this.gestureDetector.onTouchEvent(event); 
 } 
 
 @Override 
 public boolean onDown(MotionEvent e) { 
  // TODO Auto-generated method stub 
  return false; 
 } 
 
 @Override 
 public void onLongPress(MotionEvent e) { 
  // TODO Auto-generated method stub 
 
 } 
 
 @Override 
 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
   float distanceY) { 
  // TODO Auto-generated method stub 
  return false; 
 } 
 
 @Override 
 public void onShowPress(MotionEvent e) { 
  // TODO Auto-generated method stub 
 } 
 
 @Override 
 public boolean onSingleTapUp(MotionEvent e) { 
  // TODO Auto-generated method stub 
  return false; 
 } 
  
 //添加頭部的年份 閏哪月等信息 
 public void addTextToTopTextView(TextView view){ 
  StringBuffer textDate = new StringBuffer(); 
  textDate.append(calV.getShowYear()).append("年").append( 
    calV.getShowMonth()).append("月").append("\t"); 
  view.setText(textDate); 
  view.setTextColor(Color.WHITE); 
  view.setTypeface(Typeface.DEFAULT_BOLD); 
 } 
  
 //添加gridview 
 private void addGridView() { 
   
  gridView =(GridView)findViewById(R.id.gridview); 
 
  gridView.setOnTouchListener(new OnTouchListener() { 
   //將gridview中的觸摸事件回傳給gestureDetector 
   @Override 
   public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return CalendarActivity.this.gestureDetector.onTouchEvent(event); 
   } 
  });    
   
  gridView.setOnItemClickListener(new OnItemClickListener() { 
   //gridView中的每一個item的點擊事件 
    
   @Override 
   public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
     long arg3) { 
     //點擊任何一個item,得到這個item的日期(排除點擊的是周日到周六(點擊不響應(yīng))) 
     int startPosition = calV.getStartPositon(); 
     int endPosition = calV.getEndPosition(); 
     if(startPosition <= position+7 && position <= endPosition-7){ 
      String scheduleDay = calV.getDateByClickItem(position).split("\\.")[0]; //這一天的陽歷 
      //String scheduleLunarDay = calV.getDateByClickItem(position).split("\\.")[1]; //這一天的陰歷 
      String scheduleYear = calV.getShowYear(); 
      String scheduleMonth = calV.getShowMonth(); 
//     Toast.makeText(CalendarActivity.this, scheduleYear+"-"+scheduleMonth+"-"+scheduleDay, 2000).show(); 
      ruzhuTime=scheduleMonth+"月"+scheduleDay+"日";      
      lidianTime=scheduleMonth+"月"+scheduleDay+"日";   
     Intent intent=new Intent(); 
     if(state.equals("ruzhu")) 
     { 
       
      bd.putString("ruzhu", ruzhuTime); 
      System.out.println("ruzhuuuuuu"+bd.getString("ruzhu")); 
     }else if(state.equals("lidian")){ 
       
      bd.putString("lidian", lidianTime); 
     } 
     intent.setClass(CalendarActivity.this, HotelActivity.class);     
     intent.putExtras(bd); 
     startActivity(intent); 
     finish(); 
     } 
     } 
    
  }); 
 } 
  
} 

源碼下載。。。。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android離線緩存的實例代碼

    Android離線緩存的實例代碼

    android很多時候需要考慮緩存的問題,本篇文章主要介紹了Android離線緩存的實例代碼,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • Android?Service啟動流程刨析

    Android?Service啟動流程刨析

    這幾天分析了一下的啟動過程,于是乎,今天寫一下Service是如何啟動的;?給我的感覺是這些啟動過程并不復(fù)雜,千萬不要被一坨一坨的代碼嚇住了,雖然彎彎繞繞不少,重載函數(shù)一個接著一個,就向走迷宮一樣,但只要抓住主線閱讀,很快就能找到出口
    2022-08-08
  • Android 進階實現(xiàn)性能優(yōu)化之OOM與Leakcanary詳解原理

    Android 進階實現(xiàn)性能優(yōu)化之OOM與Leakcanary詳解原理

    LeakCanary 是大名鼎鼎的 square 公司開源的內(nèi)存泄漏檢測工具。目前上大部分App在開發(fā)測試階段都會接入此工具用于檢測潛在的內(nèi)存泄漏問題,做的好一點的可能會搭建一個服務(wù)器用于保存各個設(shè)備上的內(nèi)存泄漏問題再集中處理
    2021-11-11
  • Input系統(tǒng)分發(fā)策略及其應(yīng)用示例詳解

    Input系統(tǒng)分發(fā)策略及其應(yīng)用示例詳解

    這篇文章主要為大家介紹了Input系統(tǒng)分發(fā)策略及其應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • FFmpeg?Principle學(xué)習(xí)new_video_stream添加視頻輸出流

    FFmpeg?Principle學(xué)習(xí)new_video_stream添加視頻輸出流

    這篇文章主要為大家介紹了FFmpeg?Principle學(xué)習(xí)new_video_stream添加視頻輸出流示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • android使用TextView實現(xiàn)跑馬燈效果

    android使用TextView實現(xiàn)跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了android使用TextView實現(xiàn)跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • ScrollView與ListView合用(正確計算Listview的高度)的問題解決

    ScrollView與ListView合用(正確計算Listview的高度)的問題解決

    最近做項目中用到ScrollView和ListView一起使用的問題,顯示的時候ListView不能完全正確的顯示,查了好多資料終于成功解決:
    2013-05-05
  • Android 使用registerReceiver注冊BroadcastReceiver案例詳解

    Android 使用registerReceiver注冊BroadcastReceiver案例詳解

    這篇文章主要介紹了Android 使用registerReceiver注冊BroadcastReceiver案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Android ListView添加頭布局和腳布局實例詳解

    Android ListView添加頭布局和腳布局實例詳解

    這篇文章主要介紹了Android ListView添加頭布局和腳布局實例詳解的相關(guān)資料,大家看下效果是否是自己想要實現(xiàn)的效果,這里附了實現(xiàn)代碼和實現(xiàn)效果圖,需要的朋友可以參考下
    2016-11-11
  • Flutter加載圖片的多樣玩法匯總

    Flutter加載圖片的多樣玩法匯總

    flutter一般分為兩種圖片加載的方式:網(wǎng)絡(luò)加載和本地加載,下面這篇文章主要給大家介紹了關(guān)于Flutter加載圖片的多樣玩法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論