1.布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="300dp" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
</RadioGroup>
</LinearLayout>
2.主方法 MainActivity.java
package com.example.day9a_03_viewpager;
import java.util.ArrayList;
import com.example.day9a_03_viewpager.adapter.MypagerAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1找控件
final RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
pager = (ViewPager) findViewById(R.id.pager);
// 2数据
int arr[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
R.drawable.a4 };
final ArrayList<ImageView> list = new ArrayList<ImageView>();
for (int i = 0; i < arr.length; i++) {
ImageView imageView = new ImageView(MainActivity.this);
// 设置图片
imageView.setImageResource(arr[i]);
// 加入集合
list.add(imageView);
// 11创建小圆点
RadioButton button = new RadioButton(MainActivity.this);
radioGroup.addView(button);
}
// 3适配器
pager.setAdapter(new MypagerAdapter(list));
// 设置小圆点
// 12选中第一个
radioGroup.check(radioGroup.getChildAt(0).getId());
// 13页面滑动小圆点跟着走
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 17求膜防止数据超过list.size()
arg0 = arg0 % list.size();
// 14页面切换切换的时候,也切换小圆点的选中
radioGroup.check(radioGroup.getChildAt(arg0).getId());
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// 页面滚动
}
@Override
public void onPageScrollStateChanged(int arg0) {
// 滚动状态改变
}
});
// 15实现无限??
// 进入适配器
// 18实现自动轮播
handler.sendEmptyMessageDelayed(0, 2000);
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
//19切换界面
//先知道当前展示的是第几个界面,然后得到界面的索引+1=下一个页面
//获取当前展示的界面索引
int currentItem = pager.getCurrentItem()+1;
pager.setCurrentItem(currentItem);
//20实现无限轮播
handler.sendEmptyMessageDelayed(0, 2000);
break;
}
};
};
private ViewPager pager;
}
3.适配器 MypagerAdapter
package com.example.day9a_03_viewpager.adapter;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
//4继承PagerAdapter
public class MypagerAdapter extends PagerAdapter {
//5 数据属性
ArrayList<ImageView> list;
//6有参构造
public MypagerAdapter(ArrayList<ImageView> list) {
this.list = list;
}
@Override
public int getCount() {
// 7设置页面个数
// return list.size();
//15给适配器返回一个无限大得值
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
//8返回
return arg0==arg1;
}
//9调用初始条目的方法
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 5 %4=1
// 20%4=0
//16求膜防止数据超过list.size()
position=position%list.size();
ImageView imageView = list.get(position);
//把imageview 加到viewpager中
container.addView(imageView);
//最后要返回
return imageView;
}
//10销毁条目
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object );
}
}