`
malong26
  • 浏览: 168921 次
  • 性别: 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,来实现,总感觉是种浪费在里面。

相关推荐

    无限轮播Viewpager

    5. **处理拖拽**:ViewPager默认支持手势拖拽,但为了处理边界情况,我们需要在`onPageScrolled()`回调中做额外的逻辑判断,确保在拖动到边界时能够正确处理页面的切换,保持无限循环的效果。 6. **引导图**:引导...

    ViewPager 实现gallery效果+无限循环滚动

    在本教程中,我们将深入探讨如何利用ViewPager实现一个类似画廊(Gallery)的效果,并且让其能够无限循环滚动。 首先,我们要了解ViewPager的基本用法。ViewPager是Android Support Library的一部分,它允许用户在...

    Android中如何使用ViewPager实现类似laucher左右拖动效果源码

    本教程将深入探讨如何利用ViewPager来实现类似启动器的左右拖动效果,并提供源码参考。 首先,我们需要了解ViewPager的基本用法。ViewPager是Android Support Library中的一个控件,它允许用户通过手势或编程方式在...

    无限循环Viewpager

    - 可能会有一个内部布尔变量`isDragging`来跟踪用户是否在拖动`ViewPager`,当该变量为`true`时,表示用户正在交互,自动循环应暂停。 3. **非`Integer.MAX_VALUE`实现**: - 原生的`ViewPager`可以通过设置`...

    CycleViewPager

    可以循环拖动的ViewPager

    qml 实现gridview带滚动条和翻页

    在QML(Qt Quick)中,GridView是一种布局管理器,用于在二维网格中显示元素,通常用于创建诸如图片库、应用列表等用户界面。而在这个主题中,我们要讨论如何在GridView中添加滚动条和翻页功能,使得用户可以通过...

    swift-Swift实现广告轮播图。无限轮播图。Android中的ViewPager

    Android中的ViewPager”是为了在Swift环境下模仿Android中的ViewPager功能,创建一个无限循环的广告轮播组件。在Android开发中,ViewPager是一个常用的组件,它允许用户左右滑动查看多个页面,通常用于展示广告或一...

    可以横向拖动的TabHost.zip

    总之,“可以横向拖动的TabHost”是一种创新的用户界面设计,通过结合传统的TabHost和滑动视图组件(如ViewPager),实现了更加直观和用户友好的界面交互。在实际开发中,这种技术可以帮助提升应用的吸引力和易用性...

    Banner广告控件

    首先,关于"循环播放",这个特性意味着Banner控件会自动地从第一个广告滑动到最后一个,然后无缝返回到第一个,形成一个无限循环的效果。这通常通过在ViewPager的数据源中设置适当的逻辑来实现,可能涉及到适配器的...

    android轮播图

    本项目“ADBannerUI-master”显然是一个实现Android轮播图功能的开源库,它提供了联网获取图片并支持用户手动拖动和自动定时切换的能力,而且具备无限循环的特点,使得用户体验更加流畅。 首先,我们要理解轮播图的...

    android模仿桌面左右滑屏

    为了实现无限循环的滑动效果,你需要在适配器中进行特殊处理,确保无论用户向左滑还是向右滑,都能正确地跳转到正确的页面。 在自定义Launcher时,还需要考虑图标、快捷方式、文件夹等元素的显示和交互。这通常涉及...

    android UI设计

    在描述中提到的“结合Gridview的拖动”,指的是可能添加了自定义的触摸监听事件,使用户可以通过拖动来交互和操作GridView中的项。 2. **广告的滑动**: 在Android应用中,广告通常以轮播图的形式出现,这涉及到滑动...

    Android源码及精美动画值得你学习

    首先,`ViewPager广告轮播+无限循环+定时播放.rar`,这是一个常见的广告轮播组件实现。ViewPager是Android中用于展示可滑动的页面集合的控件,它可以实现左右滑动切换页面的效果。在这个Demo中,通过适配器...

    左右滑动效果

    在实际项目中,我们可能会遇到自定义需求,如无限循环的轮播图、带有指示器的翻页等。这时,我们需要对原有的滑动框架进行扩展,增加相应的逻辑处理。例如,通过维护一个虚拟的页面列表,可以实现无边界滑动;为每个...

    WHC_-ContainerView-master:模仿qq,网易新闻,循环滚动菜单,添加删除排序

    "高仿QQ未读消息badge拖拽水滴效果"是指在界面上模拟QQ应用中的未读消息提示,当用户触摸并拖动这个提示时,它会像水滴一样动态变形,增加了用户体验的趣味性和互动性。同时,"网易新闻viewPager特效集成"意味着该...

    java实现校园一卡通源码-StarsRepository:星库

    一个无限滚动的ViewPager 8 自定义ListView中实现多列和可变大小的元素 9 Cube-SDK 是一个开发框架。这个框架致力于快速实现需求,解放生产力。 10 很强大的滑动layout 11 上下左右都可以使用的可拖拽控件 12 这是...

    Android项目之——页面特效集合(附源码).rar

    3. **轮播图效果**:许多应用中都有轮播图组件,如ViewPager配合PagerAdapter可以实现图片或内容的自动滑动展示,还可以添加左右滑动指示器、过渡动画等。 4. **滑动菜单和抽屉布局**:侧滑菜单(Sliding Drawer)...

    图片浏览(带水平滑动的GridView和带gallery的ViewPage)|kobeyxyx-6235953-ImageView.zip

    ImageView是Android系统提供的用于显示图片的基础控件,而GestureDetector可以帮助我们检测用户的触摸手势,如捏合、拖动等,从而实现图片的缩放和平移。这里可能需要用到ScaleGestureDetector来处理缩放操作,通过...

    Android入门

    ### Android入门知识点详解 #### 一、Android简介 ... - 支持循环显示、自动播放等功能。 以上内容概述了Android入门所需的基础知识,涵盖了从基本概念到常见控件的使用方法,对于初学者来说是非常宝贵的学习资料。

Global site tag (gtag.js) - Google Analytics