今天我們來實現一個無限循環的畫廊效果,仿百度地圖等
先來看一下效果圖
需要解決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項目 附件下載