前几天写过一个关于 viewpage的无限循环的东西 主要是根据viewpage的滑动状态来进行判断 来进行页面的跳转 整个切换的过程 并不是很流畅 是一种跳转的方式进行切换的
今天要写的东西 在网上也有了很多的代码 和demo 整个过程和思维其实非常的简单
主要是 在adapter 里设置一个很大的数一般是 整数的最大值 然后在跟list的长度取余数来加载页面 这样的做法如果用户真的很无聊的向一个方向滑动了整数最大值那么多的次数 整个滑动就结束了 从这个方面来讲可以说这种方式并没有真正的解决无限循环滑动的问题 为了是在初始状态下也可以向左边滑动 可以将viewpage的当当前页设置的很大 这样在初始状态下 可以向左右两个方向滑动 这种方式的滑动解决方案 完全是基于工程的思维--解决问题至上。下面贴一下adapter的代码:
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
// container.removeView(viewList.get(position%viewList.size()));//delete view
// View view = viewList.get(position);
// container.removeView(viewList.get(position%viewList.size())); //这里注释掉是解决 当你view只有3个的时候的异常当你的view多于3个的时候 还要 需要 把划出屏幕的view给remove掉的!!
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
try {
container.addView(viewList.get(position%viewList.size()),0);//通过取余数的方式加载view 异常还是要捕捉的 原因同上
return viewList.get(position%viewList.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return viewList.get(position%viewList.size());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;//这里是关键 设置一个很大的值 假设用户不会滑动这多次 实际也是如此 用户没那么无聊
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1; //wroten in api
}
viewPager.setCurrentItem(viewList.size()*50); 将当前页设置为较大的值 这样在初始情况下就可以左右滑动了 但是 这里如果 用户向左滑动了50次 将不会在滑动了 有时间的朋友可以 在这里设置个小点的值 自己滑动试试看
在OnpageChangeListener中
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
nowPage = arg0%viewList.size(); // 也是通过当前的位置和viewlist的长度取余数的方式来 切换导航 和做相关的处理!
。。。。}