今天我们来实现一个无限循环的画廊效果,仿百度地图等
先来看一下效果图
需要解决2个问题
1、界面同时显示多条记录
2、无限循环
一、先来解决一下第一个问题,我们重写一下ViewPager, 处理一下显示宽度
public class GalleryViewPager extends ViewPager {
private DisplayMetrics displayMetrics;
public GalleryViewPager(Context context) {
super(context);
init();
}
public GalleryViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
displayMetrics = getContext().getResources().getDisplayMetrics();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(displayMetrics.widthPixels - getPageMargin() * 4, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
android:clipChildren表示是否限制子View在其范围内
二、实现无限循环,其实是一个伪循环,我们来处理一下Adapter实现
class GalleryAdapter extends FragmentPagerAdapter {
int count = 10;//默认10
public GalleryAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ItemFragment.create(String.format("这里是第%d页", (position % count) + 1));
}
/**
* 数量设置为最大
* @return
*/
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
/**
* 真实数量
* @return
*/
public int getRealCount() {
return this.count;
}
}
好的,准备工作就绪
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (GalleryViewPager) findViewById(R.id.view_pager);
mViewPager.setPageMargin(20);//设置页面间距
mViewPager.setAdapter(adapter = new GalleryAdapter(getSupportFragmentManager()));
mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 + Integer.MAX_VALUE % adapter.getRealCount());//设置起始位置
}
eclipse项目 附件下载