ViewPager真正实现无限轮播(偷梁换柱法,切换无回滚)
2016-07-12 20:01
405 查看
首先思路图
![](http://img.blog.csdn.net/20160712200222410?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
布局
[/code]
代码如下
布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.itheima.activity.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
[/code]
代码如下
package com.example.activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.itheima.activity.R; public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; //图片资源 private int[] mPic = {R.mipmap.home01, R.mipmap.home02, R.mipmap.home03, R.mipmap.home04, R.mipmap.home05}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查找viewpager mViewPager = (ViewPager) findViewById(R.id.viewpager); //设置adapter mViewPager.setAdapter(new MyPagerAdapter()); //初始化显示下标一位置 mViewPager.setCurrentItem(1); //设置page改变监听 initListener(); } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { //左右各加两张图片,图片总数加二 return mPic.length + 2; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { //0下标与最大下标分别加入图一与图5,正常图片顺序从1下标开始.所以需要改变position //如果下标是0, if (position == 0) { //将下标指向图五 position = mPic.length - 1; //如果是最后一个下标 } else if (position == getCount() - 1) { //将下标指向图一 position = 0; } else { //上面两步将左右两边的下标指向了图一和图五 //我们正常的图片从下标一开始,所以需要-1 position -= 1; } //设置图片 ImageView iv = new ImageView(MainActivity.this); iv.setImageResource(mPic[position]); container.addView(iv); return iv; } } //监听page位置改变 private void initListener() { mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Log.e("MainActivi", "当前下标:"+position); } @Override public void onPageScrollStateChanged(int state) { //如果当前状态是静止的状态(等待动画走完,静默切换界面) if (state == ViewPager.SCROLL_STATE_IDLE) { //如果当前page指向0下标的图5 if (mViewPager.getCurrentItem() == 0) { //跳转到正常的图五 mViewPager.setCurrentItem(mPic.length, false);//false取消跳转动画(静默跳转) //如果当前page指向最大下标的图一 } else if (mViewPager.getCurrentItem() == mPic.length + 1) { //跳转到正常的图一 mViewPager.setCurrentItem(1, false);//false取消跳转动画(静默跳转) } } } }); } }
相关文章推荐
- 如何用Ext中的panel动态的加载js文件,我用的了autoLoad,并将其属性scripts设成了true,但还是不行
- NSString与NSMutableString的应用小结
- LD_LIBRARY_PATH,ldconfig,pkg-config等的作用
- 2016长乐夏令营 Day3
- SSH和SFTP简介
- TypeError: Ext.fly(...).findParent is not a function
- HOOK Object XXProcedure 保护进程
- 关于Android开发中布局属性weight的解释
- nginx安装和注意
- POJ 1958 变形汉诺塔
- Oracle-ASM安装教程
- Java编程中操作XML文件(生成方法一:DOM)
- linux zlib 解压缩和 iconv编码转换失败问题
- java 中|| 和 && 的运算原则
- iOS 【沙盒目录及文件存储相关】
- shareKit
- LZW数据压缩算法的原理分析
- PL/SQL development 中文乱码问题解决方案
- 详解js跨域问题
- Spring AOP切面实现:异常处理