Android ViewPager循環左右自動滑動加載Page
package zhangphil.auto_viewpager;import java.util.ArrayList; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; /** * Android ViewPager循環左右自動滑動加載Page。 * * 核心關鍵:使用 ViewPager的setCurrentItem(int index)左右自動循環加載。 * 思路:使用Android Handler,在Handler的handleMessage(Message msg)中收消息,收到消息就從msg中解析出需要加載的索引。 * 相應的,開辟一個線程,時隔兩秒就用Handler發一個Message,觸發Handler的handleMessage,從而調用ViewPager的setCurrentItem操作. */ public class MainActivity extends ActionBarActivity { private ViewPager mViewPager; private final static String ID = "id"; private ArrayList<Fragment> mArrayList; // 用以顯示的Fragment總數,假設有5個. private final int SIZE = 5; private Handler handler; private final int WHAT = 0xf01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mArrayList = new ArrayList<Fragment>(); for (int i = 0; i < SIZE; i++) { Fragment f = new TestFragment(); Bundle b = new Bundle(); b.putInt(ID, i); f.setArguments(b); mArrayList.add(f); } mViewPager = (ViewPager) findViewById(R.id.viewpager); FragmentPagerAdapter mPagerAdapter = new MyFragmentPagerAdapter( getSupportFragmentManager()); mViewPager.setAdapter(mPagerAdapter); handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case WHAT: int index = (Integer) msg.obj; mViewPager.setCurrentItem(index); break; } } }; new Thread(new Runnable() { @Override public void run() { int i = 0; while (true) { // 當超過SIZE后,回繞,從頭開始循環。 i = i % SIZE; Message message = new Message(); message.what = WHAT; message.obj = i; handler.sendMessage(message); // 休息兩秒。 SystemClock.sleep(2000); i++; } } }).start(); } private class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int pos) { return mArrayList.get(pos); } @Override public int getCount() { return mArrayList.size(); } } // 測試的Fragmnt,只顯示一個Id,用于區別不同的Fragment。 public static class TestFragment extends Fragment { private int Id; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle b = this.getArguments(); Id = b.getInt(ID); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView tv = new TextView(getActivity()); String str = "id: " + Id; tv.setTextColor(Color.LTGRAY); tv.setText(str); tv.setTextSize(50); tv.setGravity(Gravity.CENTER); return tv; } } } </pre>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" ><FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </LinearLayout> </pre>
本文由用戶 dy223 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!