`
malong26
  • 浏览: 166892 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

viewpager循环拖动

阅读更多
最近在研究viewpager,准备做循环拖动即A->B->C->A->B->C->A->...
找了一下相关资料,只有stactoverflow上有一条比较靠谱的资料,但是不全,自己琢磨了一下,实现了循环拖动。

这里只需要对pageadapter进行操作,源代码如下:
 public class ViewPagerAdapter extends PagerAdapter{

    	private List<View> views;
    	Context context;
    	int mCount;
    	public ViewPagerAdapter(Context context,List<View> views){
    		this.views=views;
    		this.context=context;
    		mCount = views.size() +1;
    	}
		@Override
		public void destroyItem(View collection, int position, Object arg2) {
			 if (position >= views.size()-1) {
		            int newPosition = position%views.size();
		            position = newPosition;
				((ViewPager) collection).removeView(views.get(position));
			 }
		}

		@Override
		public void finishUpdate(View arg0) {
			
		}

		@Override
		public int getCount() {
			return mCount;
		}

		@Override
		public Object instantiateItem(View collection, int position) {
			
			 if (position >= views.size()-1) {
		            int newPosition = position%views.size();
		            
		            position = newPosition;
		            mCount++;
		        }

			try {
				((ViewPager) collection).addView(views.get(position),0);
			} catch (Exception e) {
			}
			return views.get(position);
		}

		@Override
		public boolean isViewFromObject(View view, Object object) {
			return view==(object);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
			
		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
			
		}
    	
    }



再附上Activity的源码:
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;

public class ViewPageDemoActivity extends Activity {
	
	ViewPager pager;
	LayoutInflater inflater;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pager=(ViewPager) this.findViewById(R.id.view_pager);
        inflater=LayoutInflater.from(this);
       List<View> views=new ArrayList<View>();
       View view1=inflater.inflate(R.layout.layout1, null);
       View view2=inflater.inflate(R.layout.layout2, null);
       View view3=inflater.inflate(R.layout.layout3, null);
       Views.add(view1);
       Views.add(view2);
       Views.add(view3);
       
       ViewPagAdapter adapter=new ViewPagAdapter(this, views);
       pager.setAdapter(adapter);
    
  }
 }  
2
4
分享到:
评论
6 楼 malong26 2012-06-11  
xuff78 写道
不过正因为销毁了以前的,往回返就是空白了。。

shaobin0604 写道
试了一下,一直往右划动可以循环,往左有问题

4楼说的对,不过最近没时间想这个事,项目不用这玩应。大家有好的想法可以贴上来
5 楼 shaobin0604 2012-06-08  
试了一下,一直往右划动可以循环,往左有问题
4 楼 xuff78 2012-06-06  
不过正因为销毁了以前的,往回返就是空白了。。
3 楼 xuff78 2012-06-06  
经验证,能实现循环,非常感谢提供,以前一直不知道instantiateItem为何用的
2 楼 malong26 2012-05-28  
iobee 写道
这个代码我看了下。并没有实现直正的循环,通过新增viewpage,来实现,总感觉是种浪费在里面。

没什么浪费的,用过的View就销毁了,同时存在的只有3个view。如果你觉得页面上的数据需要重新下载的话,你可以做数据持久化么。
1 楼 iobee 2012-05-28  
这个代码我看了下。并没有实现直正的循环,通过新增viewpage,来实现,总感觉是种浪费在里面。

相关推荐

Global site tag (gtag.js) - Google Analytics