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;@Overrideprotected 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() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case WHAT:int index = (Integer) msg.obj;mViewPager.setCurrentItem(index);break;}}};new Thread(new Runnable() {@Overridepublic 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);}@Overridepublic Fragment getItem(int pos) {return mArrayList.get(pos);}@Overridepublic int getCount() {return mArrayList.size();}}// 测试的Fragmnt,只显示一个Id,用于区别不同的Fragment。public static class TestFragment extends Fragment {private int Id;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Bundle b = this.getArguments();Id = b.getInt(ID);}@Overridepublic 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;}}}

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>

更多相关文章

  1. Android(安卓)Glide加载Gif
  2. android异步加载图片
  3. android加载.swf flash文件
  4. android adapter 异步加载图片
  5. Android在WebView中注入Js代码
  6. Android(安卓)setting中添加桌面循环滑动选项
  7. android中加载assets中的资源文件
  8. androidの自定义加载对话框ProgressDialog
  9. android中加载assets中的资源文件

随机推荐

  1. Android(安卓)验证输入的必须为汉字
  2. 【Appium】架构简单分析
  3. android 2.2 视频和图片的缩略图处理
  4. Android中两种设置全屏的方法!!!
  5. android adb shell 的ls命令出现奇怪的字
  6. android 中bitmap与String(base64) byte[]
  7. Android(安卓)更新和安装
  8. android linux 基础知识总结(1)
  9. 编译Coco2d-x android 程序出现make: ***
  10. 《Android开发卷——自定义日期选择器(一)