Viewpager完美实现左右循环滑动
来源:互联网 发布:信用信息数据采集制度 编辑:程序博客网 时间:2024/05/17 08:26
大家知道Viewpager在普通的情况下是不能实现循环滑动的,本人在网上看了许多博客,无外乎他们的方法就是把getCount的返回值设置的很大,本人也这样试过,确实可以实现向右循环滑动,但是向左滑动时程序就会挂掉,具体原因我还没找到,如果有哪位大神知道请赐教
好现在讲讲我自己的方法
原理:简单来说就是用到了ViewPager的一个方法setCurrentItem这个方法,我们的数据源也需要作出相应的改变,比原来的情况需要多出2个,这两个多余的分别放在首末的位置,具体为什么要这么做看代码,这样更直观
首先布局,这个很简单都一样不多说
<LinearLayout 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:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/id_vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </LinearLayout>
PagerAdapter这个也很简单没有什么多讲的,与普通的ViewPager的适配器一样
public class MAdapter extends PagerAdapter {List<ImageView> mDatas;public MAdapter(List<ImageView> datas) {mDatas=datas;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==arg1;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {Log.i("PagerAdapter","destroyItem:"+ position);container.removeView(mDatas.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {Log.i("PagerAdapter","instantiateItem:"+ position);container.addView(mDatas.get(position));return mDatas.get(position);}}
public class MainActivity extends Activity implements OnPageChangeListener{private ViewPager mViewPager;private List<ImageView> mDatas;private PagerAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initDatas();mAdapter=new MAdapter(mDatas);mViewPager.setAdapter(mAdapter);mViewPager.setCurrentItem(1);//注意把其实位置设为1mViewPager.setOnPageChangeListener(this);}private void initView() {mViewPager=(ViewPager) findViewById(R.id.id_vp);}private void initDatas(){mDatas=new ArrayList<ImageView>();//这里添加冗余数据,它其实是与倒数第二个数据一模一样ImageView iv0=new ImageView(this);iv0.setBackgroundColor(Color.YELLOW);mDatas.add(iv0);ImageView iv1=new ImageView(this);iv1.setBackgroundColor(Color.RED);mDatas.add(iv1);ImageView iv2=new ImageView(this);iv2.setBackgroundColor(Color.BLUE);mDatas.add(iv2);ImageView iv3=new ImageView(this);iv3.setBackgroundColor(Color.GREEN);mDatas.add(iv3);ImageView iv4=new ImageView(this);iv4.setBackgroundColor(Color.YELLOW);mDatas.add(iv4);//这里也是冗余数据,它与第二的数据是一模一样的,具体什么说用看onPageScrolled方法就知道了ImageView iv5=new ImageView(this);iv5.setBackgroundColor(Color.RED);mDatas.add(iv5);}@Overridepublic void onPageScrollStateChanged(int state) {}//完美实现左滑右滑@Overridepublic void onPageScrolled(int position, float offsetPerc, int offsetPixel) {Log.i("TAG", "position="+position+" offsetPerc="+offsetPerc);//关键地方自己好好琢磨if(position==0){if (offsetPerc==0) {mViewPager.setCurrentItem(mDatas.size()-2, false);}}if (position==mDatas.size()-1) {if(offsetPerc==0){mViewPager.setCurrentItem(1, false);}}}@Overridepublic void onPageSelected(int position) { }}
0 0
- Viewpager完美实现左右循环滑动
- ViewPager实现左右循环滑动
- 使用ViewPager实现左右循环滑动
- 【Android开发】ViewPager实现左右循环滑动
- 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现左右循环滑动 总结
- ViewPager实现左右无限循环滑动
- 使用ViewPager实现左右循环滑动
- 使用ViewPager实现左右循环滑动
- 使用ViewPager实现左右循环滑动图片
- 实现ViewPager的左右循环滑动
- ViewPager左右循环滑动
- viewpager左右循环滑动
- 使用ViewPager实现左右循环滑动及滑动跳转
- viewpager实现循环滑动(左右无限循环)
- viewpager 实现左右滑动
- ViewPager的左右循环滑动
- 左右循环滑动的viewpager
- 圖片處理
- 向Android Studio 中导入的Eclipse项目中添加第三方开源库
- GRE写作范文——事物不会一成不变
- my frist app project(第一个app项目)
- 字符串查找和替换接口
- Viewpager完美实现左右循环滑动
- Tomcat 性能优化之APR插件安装
- Android UI
- 进程遍历
- 简单安卓图片自动轮播
- 汉诺塔Python简单实现!
- Android应用安全现状与解决方案(学习资料)
- Windows IOCP
- 黑马程序员——java基础——泛型