Android实现ViewPager无限循环效果(一)
本文实例为大家分享了Android实现ViewPager无限循环的具体代码,供大家参考,具体内容如下
方式一:
实现原理:
假设有3张图片,分别是1,2,3,那么就创建5张图片,这5张图片的顺序为:3,1,2,3,1,其中1,2,3为我们要实现滑动的图片,最左面的3和最右面的1是我们另外添加的图片,开始时,显示图片1,当图片向左滑动依次为1,2,3,当从第3张图片继续向左滑动,会出现我们多添加的图片1,这时,将当前的index设置为真正的图片1所在的位置。
packagecom.xiaomai.myproject.demo;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.support.v4.view.ViewPager;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importcom.xiaomai.myproject.R;
importcom.xiaomai.myproject.adapter.LoopViewPagerAdapter;
importcom.xiaomai.myproject.base.BaseActivity;
importcom.xiaomai.myproject.utils.Utils;
importjava.util.ArrayList;
importjava.util.List;
/**
*CreatedbyXiaoMaion2016/10/717:19.
*
*/
publicclassLoopViewPagerDemoActivityextendsBaseActivity{
/**
*更新图片的时间
*/
privatestaticfinalintUPDATE_TIME=3*1000;
privateViewPagermViewPager;
privateLoopViewPagerAdaptermLoopViewPager;
/**
*图片资源集合
*/
privateint[]mImageIds;
/**
*图片集合
*/
privateListmImageList;
/**
*当前广告的index
*/
privateintmCurrentPageIndex;
/**
*指示Point
*/
privateLinearLayoutmLinearLayoutPoints;
privateHandlermHandler=newHandler();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
protectedvoidonResume(){
super.onResume();
mHandler.postDelayed(myRunnable,UPDATE_TIME);
}
@Override
protectedvoidonPause(){
super.onPause();
mHandler.removeCallbacks(myRunnable);
}
RunnablemyRunnable=newRunnable(){
@Override
publicvoidrun(){
mViewPager.setCurrentItem(mCurrentPageIndex+1);
}
};
@Override
protectedvoidinitVariables(){
super.initVariables();
}
@Override
protectedvoidinitViews(){
mLinearLayoutPoints=(LinearLayout)findViewById(R.id.activity_ll_container);
mViewPager=(ViewPager)findViewById(R.id.activity_loop_viewpager);
}
@Override
protectedvoidloadData(){
super.loadData();
mHandler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
/**
*初始化图片的资源id
*/
mImageIds=newint[]{
R.mipmap.ic_launcher,
R.mipmap.ic_launcher,
R.drawable.my_toast,
R.drawable.my_toast};
/**
*添加ImageView
*/
mImageList=newArrayList<>();
//额外添加两张图片
intpagerCount=mImageIds.length+2;
ViewGroup.LayoutParamslayoutParams=
newViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
for(inti=0;i
packagecom.xiaomai.myproject.adapter;
importandroid.support.v4.view.PagerAdapter;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
importjava.util.List;
/**
*CreatedbyXiaoMaion2016/10/717:23.
*/
publicclassLoopViewPagerAdapterextendsPagerAdapter{
privateListmImageList;
privateint[]mImageIds;
publicLoopViewPagerAdapter(ListmImageList,int[]mImageIds){
this.mImageList=mImageList;
this.mImageIds=mImageIds;
}
@Override
publicintgetCount(){
returnmImageList==null?0:mImageList.size();
}
@Override
publicbooleanisViewFromObject(Viewview,Objectobject){
returnview==object;
}
@Override
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
if(position==0){
//如果是第0个item就设置它的图片内容为最后一个图片的内容
mImageList.get(position).setImageResource(mImageIds[mImageIds.length-1]);
}elseif(position==(mImageList.size()-1)){
//如果是最后一个item就设置它的图片内容为第一个图片的内容
mImageList.get(position).setImageResource(mImageIds[0]);
}else{
//这是正常的图片
mImageList.get(position).setImageResource(mImageIds[position-1]);
}
container.addView(mImageList.get(position));
returnmImageList.get(position);
}
@Override
publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){
container.removeView(mImageList.get(position));
}
}
布局文件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。