之前有用viewpager加gridview实现过日历的翻页和选中效果,但是尤其是滑动效果不太流畅,现在改成线性布局,比较完美的实现了这个效果,并且对viewpager的无限循环也做了复用处理。viewpager在内存中会保存左中右三个页面的view,我们只需要将这三个view放在一个list里,循环的时候 复用刷新数据即可,原理类似listview的view池的概念。
效果图
主要代码:
package com.example.datedemo;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv_title;
private ViewPager vp;
private TextView tv_last;
private List<LinearLayout> list_v = new ArrayList<LinearLayout>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_title = (TextView) findViewById(R.id.view_title);
vp = (ViewPager) findViewById(R.id.vp);
Calendar calendar = Calendar.getInstance();
tv_title.setText(calendar.get(Calendar.YEAR) + "." + (calendar.get(Calendar.MONTH) +