ViewPager在我们的开发中用到的非常多,现在基本每个页面都需要用到它,和ListView一样频繁;
下面先说一下最简单的使用:注意:ViewPager导包一定要导入Android Support v4: 这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的
只是为了避免其它版本出错;
下面是自己简单实现的代码段:(注释比较详细)
1:布局:(这里我用的是eclipse,libs包下导入V4jar包,Android studio会自动导入V4)
<RelativeLayout 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.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="60dp"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
/>
<RadioButton
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/but4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RadioGroup>
</RelativeLayout>
//这里是MainActivity里实现
public class MainActivity extends Activity {
private ViewPager viewPager;
private List<Integer> list;
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源ID
viewPager=(ViewPager) findViewById(R.id.viewpager);
list=new ArrayList<Integer>();
radioGroup=(RadioGroup) findViewById(R.id.radiogroup);
//讲图片添加到List集合当中
list.add(R.drawable.a);
list.add(R.drawable.c);
list.add(R.drawable.d);
//获取适配器
ViewPagerAdapter adapter=new ViewPagerAdapter(this,list);
viewPager.setAdapter(adapter);
//设置默认的位置
viewPager.setCurrentItem(list.size()*10000);
//监听ViewPager
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
//选择当前的图片
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
//通过的到图片选中的位置去设置radioButton
switch (position%list.size()) {
case 0:
//通过radioGroup检查radioButton
radioGroup.check(R.id.but1);
break;
case 1:
radioGroup.check(R.id.but2);
break;
case 2:
radioGroup.check(R.id.but3);
break;
case 3:
radioGroup.check(R.id.but4);
break;
default:
break;
}
}
//
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// TODO Auto-generated method stub
//偏移值
// Log.i("TAG", "positionOffset"+positionOffset);
// Log.i("TAG", "positionOffsetPixels"+positionOffsetPixels);
}
//还动改变的方法
/***
*
* ViewPager#SCROLL_STATE_IDLE 停止 0
* ViewPager#SCROLL_STATE_DRAGGING 拖动 1
* ViewPager#SCROLL_STATE_SETTLING 弹回 2
*
*/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
// Log.i("TAG", "state"+state);
}
});
}
}
//这里是给·viewPager设置的适配器
public class ViewPagerAdapter extends PagerAdapter{
private List<Integer> list;
private Context context;
public ViewPagerAdapter(Context context,List<Integer> list) {
super();
this.list = list;
this.context=context;
}
//图页的总条目数
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;//最大值
}
//判断函数所返回来的Key与一个页面视图是否是代表的同一个视图,如果相等 true
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view==object;
}
//创建视图 根据指定位置将视图添加到容器当中
//uper.instantiateItem(container, position); 必须删点 通过看源码 里面抛出的是异常
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
ImageView imageView=new ImageView(context);
imageView.setImageResource(list.get(position%list.size()));
imageView.setScaleType(ScaleType.FIT_XY);
container.addView(imageView);
return imageView;
}
//销毁视图 根据指定位置删除ViewGroup视图
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View)object);
}
}
这里写的是最简单的ViewPager,在开发是缺点比较多,后续会更新补充
补充:如果想设置自动轮播 需要使用handler,
及:在获得完适配器后面New Thread设置耗时时间,最后在onCreate上面添加handler接受消息 ,修改UI,定义一个int i=0;
然后获得当前轮播到的位置 i=viewPager.getCurrentItem(); 在进行设置每个几秒显示的位置viewPager.setCurrentItem(i+1);
这样就可以了