在网上找过好多关于如何实现ViewPager的左右循环滑动,但是总是要么实现起来复杂,要么根本就没完全实现左右循环滑动效果,所以自己实现一个,代码如下文。
代码不需要修改PagerAdapter
布局文件activity_main.xml 没什么特别之处,只有一个ViewPger控件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> </RelativeLayout>
代码文件MainActivity.java
package com.administrator.viewpagerloop; import android.app.Activity; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private ViewPager viewPager; private List<ImageView> imageViewList; private int pageIndex = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager)findViewById(R.id.viewPager); //获取资源 imageViewList = new ArrayList<>(); imageViewList.add(createImageView(this,R.drawable.image3)); //加入最后一张图片用于缓冲 imageViewList.add(createImageView(this,R.drawable.image1)); imageViewList.add(createImageView(this,R.drawable.image2)); imageViewList.add(createImageView(this,R.drawable.image3)); imageViewList.add(createImageView(this,R.drawable.image1));//加入第一张图片用于缓冲 PagerAdapter adapter = new MyPagerAdapter(imageViewList); //创建适配器 viewPager.setAdapter(adapter); //给viewPager设置适配器 /** * 重点:给ViewPager设置滑动监听 */ viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { pageIndex = position; } @Override public void onPageScrollStateChanged(int state) { if(state==0){ //state=0:滑动的View页已经确定 此时开始设置ViewPager的位置 setCurrentPageItem(); } } }); } /** * 创建ImageView * @param context 上下文对象创建控件必须传入的值 * @param image 图片的资源文件 * @return 返回创建好的ImageView */ private ImageView createImageView(Context context, int image) { ImageView imageView = new ImageView(context); //创建一个ImageView对象 imageView.setImageResource(image); //设置图片 return imageView; //返回对象 } /** * 重点:设置ViewPager的位置 */ private void setCurrentPageItem() { if(pageIndex==0) pageIndex = 3; else if(pageIndex==4) pageIndex = 1; viewPager.setCurrentItem(pageIndex,false); //设置位置 false参数为不显示滑动动画 } @Override protected void onResume() { super.onResume(); setCurrentPageItem(); } } /** * ViewPager的适配器,和常规写法一样 */ class MyPagerAdapter extends PagerAdapter { private List<ImageView> viewList; public MyPagerAdapter(List<ImageView> viewList){ this.viewList = viewList; } @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); //和常规的写法一样,不用做任何的修改 } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position));//和常规的写法一样,不用做任何的修改 } }
下面附一张效果图
源代码地址点击打开链接