1. 程式人生 > >Android ViewPager 實現無限迴圈滑動

Android ViewPager 實現無限迴圈滑動

先高亮一個問題向大家請教,謝謝大家!就是用PagerTabStripe實現時,title總是在文字的中間,怎麼能讓標題在view的左上角呢?謝謝大家!圖是在隨便找的,就是怎麼讓這個“Nearby”顯示在最左邊呢?


已經用ViewPager 和PagerTabStrip 實現了頁面滑動和tab滑動,要求實現無限迴圈滑動,糾結了很久,想到了一個不算辦法的辦法,即把adapter 中getcount 函式返回值設很大,具體如下:

mport java.util.Locale;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerTitleStrip;

/* viewpager 實現無限滑動
 * @author:Jessica
 */

public class FragmentAdapter extends FragmentPagerAdapter{

	private Context mContext;
	

		public FragmentAdapter(Context context, FragmentManager fm) {
			super(fm);
			mContext = context;
			
		}                                                                                                                                  @Override
		public Fragment getItem(int position) {
			Fragment fragment;
			int newposition;
			if(position>=0) newposition=(position+400)%4;
			else newposition = (-position)%4;
			//0,1,2,3時顯示的每一個頁面
			switch ( newposition) {
			case 0:fragment = new ColFragment();
				return fragment;
				
			case 1:fragment = new FriFregment();
				return fragment;
			
			case 2:fragment = new HotFregment();
				return fragment;
			
			case 3:fragment = new CatFragment();
				return fragment;
				default : return null;
			}
			//return fragment;
		}
		@Override
		public int getCount() {
			//return 4;
                        //返回一個很大的值,可以設定viewpager顯示範圍很大就可以無限迴圈,當然也不用這麼大。。。
			return Integer.MAX_VALUE;
		}

		@Override
		public CharSequence getPageTitle(int position) {
                        //因為一共有4個頁面待顯示,所以position對4取餘
			int newposition;
			if(position>=0) newposition=(position+400)%4;
			else newposition = (-position)%4;
			
			switch ( newposition) {
			case 0:
				return mContext.getString(R.string.about_col);
				
			case 1:
				return mContext.getString(R.string.about_friend);
			
			case 2:
				return mContext.getString(R.string.about_hot);
			
			case 3:
				return mContext.getString(R.string.about_cat);
				default : return null;
			

			}
		}	
}

但是這時第一張圖是不能向左劃的,所以在MainActivity中onCreat 中要加一句,設定當前position 不是零,是需要顯示的view的倍數就可以,大小夠用就行,這樣初始也是第一個頁面。
mfViewPager.setCurrentItem(400);
當然也可以設成如下,也可以實現第一張圖也能左畫,只是這時第一張圖不一定是我們想要顯示的第一張圖。
mfViewPager.setCurrentItem(mFragmentAdapter.getCount()/2); //<pre code_snippet_id="229272" snippet_file_name="blog_20140311_3_5135167" class="java" name="code">//mFragmentAdapter 是上面 <span style="font-family:Arial, Helvetica, sans-serif;">FragmentAdapter的一個例項化物件。</span>