先上效果图
主要思想是用gridview+viewpager做的。
这里就上一个主要的DateView类吧:
package com.example.datedemo;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.widget.AdapterView.OnItemClickListener;
public class DateView extends RelativeLayout {
private Context context;
private Map<String, DateAdapter> map;
private Calendar today, maxCalendar, minCalendar;//今天,以及日期上限和下限
private ViewPager pager;
private LayoutInflater inflater;
private ModelDate lastSelectedPosition;//当前选中的日期
private SelectedOnClickListener selectedOnClickListener;//日期被选中的接口,提供给外界调用
private boolean isFirst=true;//是否是第一次初始化
private Calendar firstDate;//初始化默认选中的日期
private boolean isFirstShowHead = false;//初始化展开或收起的状态
//设置选中监听
public void setSelectedListenser(SelectedOnClickListener selectedOnClickListener){
this.selectedOnClickListener = selectedOnClickListener;
}
public interface SelectedOnClickListener {
void onSeleted();
}
//设置初始化日期
public void setFirstDate(Calendar firstDate){
this.firstDate = firstDate;
int page = filtGetPage(firstDate.get(Calendar.YEAR),firstDate.get(Calendar.MONTH));
pager.setCurrentItem(page);
}
public DateView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
LayoutInflater layoutInflater = LayoutInflater.from(context);
layoutInflater.inflate(R.layout.view_date, this, true);
pager = (ViewPager) findViewById(R.id.vp);
inflater = layoutInflater;
today = Calendar.getInstance();
map = new HashMap<String, DateAdapter>();
initMaxAndMinDate();
pager.setAdapter(new MyAdapter());
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
if(isFirst){
return;
}
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, arg0 - 50);
if (arg0 != 50) {
setselected(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH), 1,arg0);
} else {
setselected(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH),arg0);
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub