您的位置:首页 > 移动开发 > Android开发

Android ViewPager循环左右自动滑动加载Page

2018-01-04 00:00 447 查看
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;
}
}
}


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>



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: