通常我们使用的ViewPager实现的左右滑动无法循环滚动,当到达头或尾时,不能继续重头开始,上网搜集了一些资料,找到CycleViewPager可以实现左右循环滚动,实现也比较简单,直接贴代码:
主文件:
package com.vane.widget.test; import com.example.cycleviewpager.R; import com.vane.widget.cycleviewpager.CycleViewPager; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private PagerAdapter adapter = new PagerAdapter() { private int count = 5; @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return count; } public Object instantiateItem(android.view.ViewGroup container, int position) { TextView item = new TextView( MainActivity.this); item.setText( "page " + position); container.addView( item); return item; } public void destroyItem(android.view.ViewGroup container, int position, Object object) { container.removeView( (View)object); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState); setContentView( R.layout.activity_main); CycleViewPager pager = (CycleViewPager)findViewById( R.id.pager); pager.setAdapter( adapter); } }
CycleViewPager:
package com.sie.mp.widget; import android.content.Context; import android.database.DataSetObserver; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class CycleViewPager extends ViewPager { private InnerPagerAdapter mAdapter; public CycleViewPager(Context context) { super( context); setOnPageChangeListener( null); } public CycleViewPager(Context context, AttributeSet attrs) { super( context, attrs); setOnPageChangeListener( null); } @Override public void setAdapter(PagerAdapter arg0) { mAdapter = new InnerPagerAdapter( arg0); super.setAdapter( mAdapter); setCurrentItem( 1); } @Override public void setOnPageChangeListener(OnPageChangeListener listener) { super.setOnPageChangeListener( new InnerOnPageChangeListener( listener)); } private class InnerOnPageChangeListener implements OnPageChangeListener { private OnPageChangeListener listener; private int position; public InnerOnPageChangeListener(OnPageChangeListener listener) { this.listener = listener; } @Override public void onPageScrollStateChanged(int arg0) { if(null != listener) { listener.onPageScrollStateChanged( arg0); } if(arg0 == ViewPager.SCROLL_STATE_IDLE) { if(position == mAdapter.getCount() - 1) { setCurrentItem( 1, false); } else if(position == 0) { setCurrentItem( mAdapter.getCount() - 2, false); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { if(null != listener) { listener.onPageScrolled( arg0, arg1, arg2); } } @Override public void onPageSelected(int arg0) { position = arg0; if(null != listener) { listener.onPageSelected( arg0); } } } private class InnerPagerAdapter extends PagerAdapter { private PagerAdapter adapter; public InnerPagerAdapter(PagerAdapter adapter) { this.adapter = adapter; adapter.registerDataSetObserver( new DataSetObserver() { @Override public void onChanged() { notifyDataSetChanged(); } @Override public void onInvalidated() { notifyDataSetChanged(); } }); } @Override public int getCount() { return adapter.getCount() + 2; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return adapter.isViewFromObject( arg0, arg1); } @Override public Object instantiateItem(ViewGroup container, int position) { if(position == 0) { position = adapter.getCount() - 1; } else if(position == adapter.getCount() + 1) { position = 0; } else { position -= 1; } return adapter.instantiateItem( container, position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { adapter.destroyItem( container, position, object); } } }
以上代码可以直接从GITHUB上获取:https://github.com/vanezkw/cycleviewpager.git
相关推荐
这是一个可以自动无限循环滚动的ViewPager
该ViewPager能实现自动无限循环滚动,设置自动滚动时间间隔、滚动方向、手指触摸是否停止滚动等。还能解决网上许多自动滚动ViewPager,从最后一页滚回第一页不流畅的问题
ViewPager实现了循环滚动的Fragment,当滑动到最后和第一页开始循环滚动的时候,没有动画效果。
代码使用首位各加一项的方法实现ViewPager的循环滑动,使用Handler不断发送空消息滚动ViewPager实现自动滚动
viewpager 实现一屏幕多页循环滚动,自动滚动非常流畅,手动滑动也处理的很好,很久之前的 ,估计现在也没人用
左右循环滚动的ViewPager(使用的是android studio 构建的) , 里面包含circleindicator 和 InfiniteViewPager
ViewPager巧用偷梁换柱实现自动循环滚动 简单易用好更改
(1) 自动循环滚动ViewPager、ViewPager嵌套自动滚动ViewPager (2) 网络缓存Demo (3) 图片缓存Demo,图片SD卡缓存Demo (4) 下拉刷新及滚动到底部加载更多listview Demo (6) Android系统下载管理DownloadManager功能...
viewpager实现真正的循环滚动、自动滚动,可以设置是否滚动、自动滚动间隔时间、触摸时是否停止滚动等
Viewpager左右循环滚动的一种实现仅供参考 推荐使用SDK版本在2.2以上 编码格式为UTF-8
循环滚动viewpager,仿想去专题效果
自动循环滚动的Fragment,重写viewpager禁止触摸时的滚动,简单好用
可以循环滚动播放的ViewPager。即滚动到最后一个item后可直接滚动到第一个item。项目地址:https://github.com/zhaozhentao/CycleViewPager 效果图:
ViewPager 无限滚动 gallery效果
viewpager实现无限循环滚动幻灯片
ViewPager和Gallery的循环滚动
基本思路 当图片数量为1的时候,不让滑动, 当图片数量为2的时候,按原图片顺序再依次添加,图片数翻倍变为4,防止出现空白页,但是轮播点的个数依然写为2,这样就可以完美解决。 当图片数量为n>2的时候,按照常规...
public class Touch extends Activity implements OnTouchListener, OnClickListener { private static final String TAG = "Touch" ; // These matrices will be used to move and zoom image ...
前段时间做了一个关于商城的分享介绍卡片式ViewPager,效果看起来还是蛮炫丽的,整体有如下效果特点: 1、无限轮播 2、两种卡片布局(中间与两边的不同) 3、指示灯 4、滚动到下一个卡片会在Y轴进行偏移 5、可显示...
主要为大家详细介绍了Android ViewPager实现智能无限循环滚动回绕效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下