热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

仿快捷酒店滑动选择calendar控件(使用HitRect)

声明:大神勿喷!!今天我给大家讲个故事:      longlongago…山里有个公司,公司里有个产品经理在给程序员讲需求,需求是这样讲的:我要一个仿制快捷酒店的Calendar

声明:大神勿喷!!

今天我给大家讲个故事:

       long long ago…山里有个公司,公司里有个产品经理在给程序员讲需求,需求是这样讲的:我要一个仿制快捷酒店的Calendar控件!!!(UI设计师在旁边阴暗的冷笑)…

       好了言归正传,上一篇的的HitTest让我懂了一些基本的东西,在这里总结下:

HitTest:

在父View抓取当前touch的X,Y坐标(相对于父View)。然后与子View挨个比对,看看父View的触点是否在子View相对于父View的范围内。

这样我们就能轻松的解决一些下面的Calenadr;

上代码:

activity:

package com.example.clander;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* 日历显示activity
*
*
*/
public class CalendarActivity extends Activity implements View.OnClickListener {//OnGestureListener,
// private GestureDetector gestureDetector = null;
private CalendarAdapter calV = null;
private GridView gridView = null;
private TextView topText = null;
private static int jumpMOnth= 0; //每次滑动,增加或减去一个月,默认为0(即显示当前月)
private static int jumpYear = 0; //滑动跨越一年,则增加或者减去一年,默认为0(即当前年)
private int year_c = 0;
private int month_c = 0;
private int day_c = 0;
private String currentDate = "";
private Bundle bd=null;//发送参数
private Bundle bun=null;//接收参数
private String ruzhuTime;
private String lidianTime;
private String state="";

private LinearLayout upPage,nextPage;
private List selectedViews=new ArrayList();
private boolean isPress=false;
private CalendarItemEntity inEntity,outEntity;

public CalendarActivity() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
currentDate = sdf.format(date); //当期日期
year_c = Integer.parseInt(currentDate.split("-")[0]);
month_c = Integer.parseInt(currentDate.split("-")[1]);
day_c = Integer.parseInt(currentDate.split("-")[2]);


}
private int lastTouchIndex=-1;
private int currentPosition=-1;//当前手指悬停点
private int downPositin=-1;//按下时候的点
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calendar);
bd=new Bundle();//out
bun=getIntent().getExtras();//in


if(bun!=null&&bun.getString("state").equals("ruzhu"))
{
state=bun.getString("state");
}else if(bun!=null&&bun.getString("state").equals("lidian")){
state=bun.getString("state");
}

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);

gridView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View arg0, MotionEvent event) {
int touchIndex = gridView.pointToPosition((int) event.getX(), (int) event.getY());
View childView = gridView.getChildAt(touchIndex);
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
lastTouchIndex=touchIndex;//初始化lastTouch
isPress=true;
if(selectedViews.size()!=0)
selectedViews.clear();

clearAllBg();

if (null != childView){
CalendarItemEntity entity=(CalendarItemEntity) childView.getTag();
if(entity.isCheck())
downPositin=touchIndex;
}
case MotionEvent.ACTION_MOVE:
if (null != childView){
// Log.i("texts","curr---"+currentPosition+"-----"+downPositin);
currentPosition=touchIndex;
CalendarItemEntity entity=(CalendarItemEntity)childView.getTag();
if(entity.isCheck()){
if(downPositin==-1)
downPositin=touchIndex;
currentPosition=touchIndex;
Log.i("texts","curr---"+currentPosition+"-----"+downPositin);
measureSelected();
lastTouchIndex=touchIndex;
}
}
break;
case MotionEvent.ACTION_UP:
if(selectedViews.size()==1){
if(currentPosition>=gridView.getChildCount()-1){
addGridView(); //添加一个gridView
jumpMonth++; //下一个月
calV = new CalendarAdapter(CalendarActivity.this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
addTextToTopTextView(topText);
}else if(downPositin!=-1){
setSelectedView(gridView.getChildAt(downPositin+1));
inEntity=(CalendarItemEntity) gridView.getChildAt(downPositin).getTag();
outEntity=(CalendarItemEntity) gridView.getChildAt(downPositin+1).getTag();
}
}
isPress=false;
downPositin=-1;
Log.i("texts", ""+selectedViews.size());

Toast.makeText(CalendarActivity.this,"当前选中:"+inEntity.getYear()+inEntity.getMonth()+inEntity.getCurrentDay()+"::"+
outEntity.getYear()+outEntity.getMonth()+outEntity.getCurrentDay(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
});

upPage=(LinearLayout) this.findViewById(R.id.btn_prev_month);
nextPage=(LinearLayout) this.findViewById(R.id.btn_next_month);

upPage.setOnClickListener(this);
nextPage.setOnClickListener(this);
}

private void cheekViewToAdd(View childView){
boolean isHas=false;
for (View v : selectedViews) {
if(v==childView)
isHas=true;
}
if (!isHas) {
selectedViews.add(childView);
}

}

private void setSelectedView(View childView){//让条目选中
((TextView)((LinearLayout)childView).getChildAt(0)).setBackgroundResource(R.drawable.current_day_bgc);
((TextView)((LinearLayout)childView).getChildAt(0)).setTextColor(Color.WHITE);
cheekViewToAdd(childView);
}



private void clearAllBg(){//清理所有背景
int childcount=gridView.getChildCount();
for (int i=0;i LinearLayout child=(LinearLayout)gridView.getChildAt(i);
CalendarItemEntity entity=(CalendarItemEntity) child.getTag();
if(!entity.isCheck()){
TextView textView=(TextView) child.getChildAt(0);
textView.setBackgroundResource(R.drawable.triangle05);
textView.setTextColor(Color.GRAY);
continue;
}
TextView textView=(TextView) child.getChildAt(0);
textView.setBackgroundResource(R.drawable.triangle05);
textView.setTextColor(Color.BLACK);
}
}

private void measureSelected(){
clearAllBg();
selectedViews.clear();
if(currentPosition>downPositin){//如果向右滑动
for (int i = 0; i <=currentPosition-downPositin; i++) {
if(selectedViews.size()<6){
setSelectedView(gridView.getChildAt(downPositin+i));
outEntity=(CalendarItemEntity) gridView.getChildAt(downPositin+i).getTag();
}
else if(Math.abs(currentPosition-downPositin)<6){
setSelectedView(gridView.getChildAt(downPositin+i));
outEntity=(CalendarItemEntity) gridView.getChildAt(downPositin+i).getTag();
}
else if(currentPosition-downPositin>=6){
if(i<6){
setSelectedView(gridView.getChildAt(downPositin+i));
outEntity=(CalendarItemEntity) gridView.getChildAt(downPositin+i).getTag();
}
}
}
}else if(currentPosition for(int i=0;i<=downPositin-currentPosition;i++){
if(selectedViews.size()<6)
setSelectedView(gridView.getChildAt(downPositin-i));
else if(Math.abs(downPositin-currentPosition)<6)
setSelectedView(gridView.getChildAt(downPositin-i));
else if(downPositin-currentPosition>=6){
if(i<6)
setSelectedView(gridView.getChildAt(downPositin-i));
}
Log.i("texts", "ttttt::::"+currentPosition+"---"+downPositin);

}
}else{
setSelectedView(gridView.getChildAt(currentPosition));
}
}


//添加头部的年份 闰哪月等信息
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的日期(排除点击的是周日到周六(点击不响应))
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);
}
}
}

});
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_prev_month://上一页
addGridView(); //添加一个gridView
jumpMonth--; //上一个月
calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
downPositin=-1;
addTextToTopTextView(topText);
break;
case R.id.btn_next_month://下一页
addGridView(); //添加一个gridView
jumpMonth++; //下一个月
calV = new CalendarAdapter(this,getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);
gridView.setAdapter(calV);
addTextToTopTextView(topText);
downPositin=-1;
break;
default:
break;
}

}

}

acitvity的XML文件:


android:layout_
android:layout_
android:orientation="vertical" >
android:layout_
android:layout_
android:background="#ff394147"
android:gravity="center_vertical" >
android:id="@+id/btn_prev_month"
android:layout_
android:layout_
android:layout_weight="0.2"
android:gravity="center"
android:clickable="true"
android:orientation="vertical" >
android:id="@+id/left_img"
android:layout_
android:layout_
android:background="@drawable/triangle06_states"
android:duplicateParentState="true"
android:text=""
android:textSize="16.0dip" />

android:layout_
android:layout_
android:layout_weight="0.6"
android:gravity="center"
android:orientation="vertical" >
android:id="@+id/tv_month"
android:layout_
android:layout_
android:gravity="center"
android:text="xxxx年14月"
android:textColor="#ffffffff"
android:textSize="21.0dip" />

android:id="@+id/btn_next_month"
android:layout_
android:layout_
android:layout_weight="0.2"
android:gravity="center"
android:clickable="true"
android:orientation="vertical" >
android:id="@+id/right_img"
android:layout_
android:layout_
android:background="@drawable/triangle05_states"
android:duplicateParentState="true"
android:text=""
android:textSize="16.0dip" />


android:layout_
android:layout_
android:background="#ff8091a8" >

android:text="周日" />

android:text="周一" />

android:text="周二" />

android:text="周三" />

android:text="周四" />

android:text="周五" />

android:text="周六" />

android:id="@+id/gridview"
android:layout_
android:layout_
android:background="#00000000"
android:clickable="true"
android:clipChildren="true"
android:column
android:horizOntalSpacing="1.0dip"
android:listSelector="@null"
android:numColumns="7"
android:paddingBottom="1.0dip"
android:stretchMode="columnWidth"
android:verticalSpacing="1.0dip" />

item的layout文件:


xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#FFFFFF"
android:layout_
android:layout_>
android:gravity="center"
android:layout_
android:layout_
android:id="@+id/tvtext"
/>

adapter适配器java文件:

package com.example.clander;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* 日历gridview中的每一个item显示的textview
*
* @author lmw
*
*/
public class CalendarAdapter extends BaseAdapter {
public boolean isLeapyear = false; // 是否为闰年
public int daysOfMOnth= 0; // 某月的天数
public int dayOfWeek = 0; // 具体某一天是星期几
public int lastDaysOfMOnth= 0; // 上一个月的总天数
public Context context;
public String[] dayNumber = new String[42]; // 一个gridview中的日期存入此数组中
// private static String week[] = {"周日","周一","周二","周三","周四","周五","周六"};
public SpecialCalendar sc = null;
// private LunarCalendar lc = null;
public Resources res = null;
public Drawable drawable = null;
public String currentYear = "";
public String currentMOnth= "";
public String currentDay = "";
public SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
public int currentFlag = -1; // 用于标记当天
public int[] schDateTagFlag = null; // 存储当月所有的日程日期
public String showYear = ""; // 用于在头部显示的年份
public String showMOnth= ""; // 用于在头部显示的月份
public String animalsYear = "";
public String leapMOnth= ""; // 闰哪一个月
// public String cyclical = ""; //天干地支
// 系统当前时间
public String sysDate = "";
public String sys_year = "";
public String sys_mOnth= "";
public String sys_day = "";
private Calendar currCalendar;
private int currDay;
private int currMonth;
private int currYear;

private int selectedSize=90;//可选天数
private int wantYear;
private int wantMonth;
private int wantDay;
private Calendar wantCalendar;

public CalendarAdapter() {
Date date = new Date();
sysDate = sdf.format(date); // 当期日期
sys_year = sysDate.split("-")[0];
sys_mOnth= sysDate.split("-")[1];
sys_day = sysDate.split("-")[2];
currCalendar = Calendar.getInstance();
currDay = currCalendar.get(Calendar.DAY_OF_MONTH);
currMOnth= currCalendar.get(Calendar.MONTH) + 1;
currYear = currCalendar.get(Calendar.YEAR);

wantCalendar=(Calendar) currCalendar.clone();
wantCalendar.add(Calendar.DAY_OF_YEAR,selectedSize);
wantYear=wantCalendar.get(Calendar.YEAR);
wantMOnth=wantCalendar.get(Calendar.MONTH)+1;
wantDay=wantCalendar.get(Calendar.DAY_OF_MONTH);
}
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);// 得到当前的年份
currentMOnth= String.valueOf(stepMonth); // 得到本月
// (jumpMonth为滑动的次数,每滑动一次就增加一月或减一月)
currentDay = String.valueOf(day_c); // 得到当前日期是哪天
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); // 得到跳转到的年份
currentMOnth= String.valueOf(month); // 得到跳转到的月份
currentDay = String.valueOf(day); // 得到跳转到的天

getCalendar(Integer.parseInt(currentYear),
Integer.parseInt(currentMonth));
}
@Override
public int getCount() {
return dayNumber.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CalendarItemEntity entity = new CalendarItemEntity();// 条目实体
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);
SpannableString sp = new SpannableString(d);
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);
textView.setText(sp);
textView.setTextColor(Color.GRAY);
entity.setCheck(false);
entity.setCurrentDay(Integer.parseInt("" + sp));
Calendar ca=(Calendar) currCalendar.clone();
ca.add(Calendar.DAY_OF_MONTH,-1);
long ldv=Long.parseLong(dv);
if(ca.getTimeInMillis()<=ldv&&ldv<=wantCalendar.getTimeInMillis()){
textView.setTextColor(Color.BLACK);// 当月字体设黑
drawable = res.getDrawable(R.drawable.current_day_bgc);
entity.setCheck(true);
}

if(position if(cMOnth==1){
entity.setMonth(12);
entity.setYear(cYear-1);
}else{
entity.setMonth(cMonth-1);
entity.setYear(cYear);
}
}else if (position = dayOfWeek) {
entity.setMonth(cMonth);
entity.setYear(cYear);
}else if(position>=daysOfMonth+dayOfWeek){
if(cMOnth==12){
entity.setMonth(1);
entity.setYear(cYear+1);
}else{
entity.setMonth(cMonth+1);
entity.setYear(cYear);
}
}


if (schDateTagFlag != null && schDateTagFlag.length > 0) {
for (int i = 0; i if (schDateTagFlag[i] == position) {
// 设置日程标记背景
textView.setBackgroundResource(R.drawable.mark);
}
}
}
if (currentFlag == position) {
// 设置当天的背景
drawable = res.getDrawable(R.drawable.current_day_bgc);
textView.setBackgroundDrawable(drawable);
textView.setText("今天");
textView.setTextColor(Color.WHITE);
}
if(currentFlag>0&¤tFlag+1==position){
drawable = res.getDrawable(R.drawable.current_day_bgc);
textView.setBackgroundDrawable(drawable);
textView.setText("明天");
textView.setTextColor(Color.WHITE);
}




convertView.setTag(entity);
return convertView;
}
private int cMonth;
private int cYear;
// 得到某年的某月的天数且这月的第一天是星期几
public void getCalendar(int year, int month) {
isLeapyear = sc.isLeapYear(year); // 是否为闰年
daysOfMOnth= sc.getDaysOfMonth(isLeapyear, month); // 某月的总天数
dayOfWeek = sc.getWeekdayOfMonth(year, month); // 某月第一天为星期几
lastDaysOfMOnth= sc.getDaysOfMonth(isLeapyear, month - 1); // 上一个月的总天数
Log.d("DAY", isLeapyear + " ====== " + daysOfMonth
+ " ============ " + dayOfWeek + " ========= "
+ lastDaysOfMonth);
cMOnth= month;
cYear = year;
Calendar c = Calendar.getInstance();
c.setTime(new Date(currYear, currMonth, currDay));
c.set(currYear, currMonth - 1, currDay);
System.out.println(currYear + "年 " + currMonth + "月 " + currDay
+ "日为星期:" + (c.get(Calendar.DAY_OF_WEEK) - 1));
cWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
getweek(year, month);
}
private int cWeek;
// 将一个月中的每一天的值添加入数组dayNuber中
private void getweek(int year, int month) {
int j = 1;
int flag = 0;
String lunarDay = "";
for (int i = 0; i Calendar c = Calendar.getInstance();
if (i int temp = lastDaysOfMonth - dayOfWeek + 1;
// lunarDay = lc.getLunarDate(year, month-1, temp+i,false);
c.set(year, month-2,temp+i);
dayNumber[i] = (temp + i) + "." + c.getTimeInMillis();
} else if (i String day = String.valueOf(i - dayOfWeek + 1); // 得到的日期
// lunarDay = lc.getLunarDate(year, month,
// i-dayOfWeek+1,false);
c.set(year, month-1,Integer.parseInt(day));
dayNumber[i] = i - dayOfWeek + 1 + "." + c.getTimeInMillis();
// 对于当前月才去标记当前日期
if (sys_year.equals(String.valueOf(year))
&& sys_month.equals(String.valueOf(month))
&& sys_day.equals(day)) {
// 标记当前日期
currentFlag = i;
}
setShowYear(String.valueOf(year));
setShowMonth(String.valueOf(month));
} else { // 下一个月
c.set(year, month,j);
dayNumber[i] = j + "." + c.getTimeInMillis();
j++;
}
}
// }
currCalendar = Calendar.getInstance();// 重置当前时间的calendar
String abc = "";
for (int i = 0; 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;
}
}

javaBean(实体类):

package com.example.clander;
import java.io.Serializable;
public class CalendarItemEntity implements Serializable {

/**
*
*/
private static final long serialVersiOnUID= 7086289624407287042L;


private boolean isCheck=false;

private int currentDay=-1;

private int year;

private int month;

public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean isCheck) {
this.isCheck = isCheck;
}
public int getCurrentDay() {
return currentDay;
}
public void setCurrentDay(int currentDay) {
this.currentDay = currentDay;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.mOnth= month;
}


}

Calendar核心处理类:

package com.example.clander;
import java.util.Calendar;
public class SpecialCalendar {
private int daysOfMOnth= 0; //某月的天数
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;
}
//得到某月有多少天数
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;
}


}

OK。。。看似复杂,真心很容易通俗易懂。只要耐心看下去,没有什么难的

这是效果图:

《仿快捷酒店滑动选择calendar控件(使用HitRect)》

写完之后叹了口气,洗了把脸,然后高喊一声:&#8221;测试小妹!!!咱们放学后小巷子里,6元麻辣烫,我请!!!!&#8221;

声明:大神勿喷!!!


推荐阅读
author-avatar
淑敏小朋友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有