ViewPager 的使用,轮播和设置点击事件
ViewPager
ViewPager提供了多界面的切换效果
<1>当前显示一组界面中的其中一个界面;
<2>当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分;
<3>滑动结束后,界面自动跳转到当前选择的界面中。
android-support-v4.jar 是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与ListView类似,我们也需要一个适配器,他就是PagerAdapter。
View Page 对应官方文档地址:
http://developer.android.com/reference/android/support/v4/view/ViewPager.html
具体Xml中定义
ViewPager添加add(view)的用法
PagerAdapter介绍和具体使用
PagerAdapter介绍和具体使用
适配器这个东东想必大家都不莫生,在ListView中也有适配器,listView通过重写GetView()函数来获取当前要加载的Item。而PageAdapter不太相同,毕竟PageAdapter是单个VIew的合集。
PageAdapter 必须重写的四个函数:
boolean isViewFromObject(View arg0, Object arg1)
功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
返回值:如果对应的是同一个View,返回True,否则返回False。
int getCount()
返回当前有效视图的个数
void destroyItem(ViewGroup container, int position,Object object)
该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除
Object instantiateItem(ViewGroup container, int position)
这个函数的实现的功能是创建指定位置的页面视图。适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!
返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key(最后我们举个例子试试可不可行)
上面咱们说了ViewPage添加View的案例,其实添加Fragment也是同理,只用把View换成咱们的Fragment就可以了。
添加View的时候,咱们用的Adapter,添加Fragment的时候,看下面的适配器:
如何实现轮播图:
所谓设置轮播就是多长时间跳转到以一张图,那我们怎么去实现它的
ViewPager中有这样的几个方法
getCurrentItem();这个方法是当前界面的索引
setCurrentItem(int item);这个方法是设置指定索引界面
使用Handler机制
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//该方法用来获取viewpager的当前页面的索引
int currentPage=viewpager.getCurrentItem();//设置当前页面 0
int nextPage=currentPage+1==fragments.size()?0:currentPage+1;//1
//给viewpager设置当前的page 为多少
viewpager.setCurrentItem(nextPage);
if (nextPage +1== fragments.size()) {//3
Toast.makeText(MainActivity.this, "您已经滑倒了最后一页了", Toast.LENGTH_SHORT).show();
return;
}
sendEmptyMessageDelayed(0,4000);
}
};
这个得现在 onCreate中去发送一条消息
//这个方法表示延迟2秒后在发送handler消息 1表示tab值就是在handlmessage里面的msg.what
//的值 2 表示延迟的时间
handler.sendEmptyMessageDelayed(0,4000);
给ViewPager设置监听事件
addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override//正在滑动
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
System.out.println("滑动中");
}
@Override//选中了那个pager 也表示当前显示那个pager
public void onPageSelected(int position) {
System.out.println("当前选中的page==="+position);
}
@Override//page的状态发生改变 page1 切换到pager2 该方法调用
public void onPageScrollStateChanged(int state) {
System.out.println("当前选中的装填为"+state);
}
});