思路:使用GridView进行日历数据的存储,使用ViewPager进行日历页面的切换。当然也可以使用GestureDetector+ViewFlipper进行页面的的手势控制和页面切换。首先写好GridView的adapter,用数组存储三个Gridview表示这上一个月,这一个月,和下一个月,并且添加item的点击事件,表示选中的日期。然后将这三个Gridview作为viewpager的item,并且给Viewpager添加页面改变的监听,当页面改变的时候,数据要跟着改变。注意:viewpager本身是不能进行循环显示的,因此要自己想办法 可以看我的另一篇博客。https://mp.csdn.net/postedit/79963491
MainActivity
public class MainActivity extends Activity implements OnClickListener{
private List<MyGridView> mLists;
private int index = 1;
private MyPagerListener listener;
private ViewPager viewPager;
private MyViewPagerAdapter pagerAdapter;
private TextView diary_title;
private Button lastButton;
private Button nextButton;
private CalendarAdapter gridAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
viewPager = (ViewPager) findViewById(R.id.viewPager);
diary_title = (TextView) findViewById(R.id.diary_title);
lastButton = (Button) findViewById(R.id.lastButton);
nextButton = (Button) findViewById(R.id.nextButton);
pagerAdapter = new MyViewPagerAdapter(this, mLists);
viewPager.setAdapter(pagerAdapter);
listener = new MyPagerListener();
viewPager.setOnPageChangeListener(listener);
viewPager.setCurrentItem(1);
}
private Calendar nowCalendar = Calendar.getInstance();
int year;
int month;
class MyPagerListener implements OnPageChangeListener{
int currentPosition;
@Override
public void onPageScrollStateChanged(int state) {
if (state != ViewPager.SCROLL_STATE_IDLE) return;
// 当视图在第一个时,将页面号设置为图片的最后一张。
if (currentPosition == 0) {
viewPager.setCurrentItem(mLists.size() - 2, false);
} else if (currentPosition == mLists.size() - 1) {
// 当视图在最后一个是,将页面号设置为图片的第一张。
viewPager.setCurrentItem(1, false);
}
Log.e("Calendar&