【ViewPager的学习】实现自动循环切换

    xiaoxiao2021-12-14  28

    (一)实现循环滑动:

    (1)在MyAdapter中首先修改getCount()方法中的大小,让ViewPager可滑动页面增多。

    (2)instantiateItem()方法中将position对图片数组求余:position%imageList.size()

    (3)如果viewPager设置了OnPagerChangedListener方法,里面可能会有position,注意将position求余,否则可能会由于position作索引下标导致数组溢出异常。

    (4)以上操作只能右循环,要实现左循环,只需把初始位置设置为getCount()方法中返回大小的一半,那样我们就可以向左滑

    (注意:这只是看起来循环,实际上只不过是NView在重复这5View

    如下:0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5.....0,1,2,3,4,5

    代码如下:

    private class MyAdapter extends PagerAdapter{ /** * 返回viewPager元素数量 */ @Override public int getCount() { return imageList.size()*100; } /** * 实例化一个元素 */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageList.get(position%imageList.size())); return imageList.get(position%imageList.size()); } /** * 判断是否相等 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO 自动生成的方法存根 return arg0 == (View)arg1; } /** * 销毁元素 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO 自动生成的方法存根 container.removeView((View) object); object = null; } } (二)实现自动滚动,设定一个定时器

    /*  * 自动循环有多种实现方式:  * 1、定时器:Timer  * 2、开子线程 while  true 循环  * 3、ColckManager   * 4、 用handler 发送延时信息,实现循环  */

    这里我们用第四种,比较高效:

    <span style="white-space:pre"> </span>//判断是否自动滚动的标志 private boolean isrunning = false; /** * 自动滑动的Handler * 利用 Handler.sendEmptyMessageDelayed方法,实现定时滚动 * */ private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { //让ViewPager滑到下一页 viewPager.setCurrentItem(viewPager.getCurrentItem()+1); //延时,循环调用handler if(isrunning){ handler.sendEmptyMessageDelayed(0, 2000); } }; }; /** * Activity生命周期结束时终止定时,否则可能一直进行下去 */ protected void onDestroy() { super.onDestroy(); isrunning = false; };

    在onCreate()方法中发送一个消息启动Handler。

    handler.sendEmptyMessageDelayed(0, 2000);

    为了在Activity生命周期结束时终止定时器,重写onDestory方法,里面将定时器标志置为false,停止定时即可。

    转载请注明原文地址: https://ju.6miu.com/read-964725.html

    最新回复(0)