Android ViewPager循環左右自動滑動加載Page

dy223 9年前發布 | 2K 次閱讀 Java Android

    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&quot;
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!