首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在ViewPager中禁用滑动

可以通过以下几种方式实现:

  1. 使用自定义的ViewPager类:创建一个继承自ViewPager的自定义类,重写其onTouchEvent()和onInterceptTouchEvent()方法,使其返回false,从而禁用滑动。示例代码如下:
代码语言:java
复制
public class NonSwipeableViewPager extends ViewPager {
    private boolean swipeable;

    public NonSwipeableViewPager(Context context) {
        super(context);
        swipeable = false;
    }

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        swipeable = false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return swipeable && super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return swipeable && super.onInterceptTouchEvent(event);
    }

    public void setSwipeable(boolean swipeable) {
        this.swipeable = swipeable;
    }
}

使用时,将布局文件中的ViewPager替换为NonSwipeableViewPager,并调用setSwipeable(false)方法禁用滑动。

  1. 使用addOnPageChangeListener()方法:通过ViewPager的addOnPageChangeListener()方法监听页面切换事件,在onPageSelected()回调中将当前页面重新设置为之前的页面,从而禁用滑动。示例代码如下:
代码语言:java
复制
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int currentPosition = 0;

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (position != currentPosition) {
            viewPager.setCurrentItem(currentPosition);
        }
    }

    @Override
    public void onPageSelected(int position) {
        currentPosition = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
  1. 使用FragmentStatePagerAdapter或FragmentPagerAdapter:如果使用的是FragmentStatePagerAdapter或FragmentPagerAdapter,可以重写getItemPosition()方法,使其始终返回POSITION_NONE,从而禁用滑动。示例代码如下:
代码语言:java
复制
public class MyPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragments;

    public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public int getItemPosition(@NonNull Object object) {
        return POSITION_NONE;
    }
}

使用时,创建MyPagerAdapter对象并设置给ViewPager。

以上是在ViewPager中禁用滑动的几种方法,根据具体需求选择适合的方式进行实现。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ViewPager无限滑动

前言 View轮播效果在app很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现。...根据前面的分析,destroyItem,我们把position处的page view从container移除即可,此处的object对象正是instantiateItemadd到container...有意思的是,onCreatesetAdapter之后,第一次viewPager.setCurrentItem(adapter.getStartPageIndex())并不会引起ANR,应该是onCreate...正常使用ViewPager,没有任何无限滑动的逻辑的情况下: 假设第一次setAdapter的时候,getCount返回1,此时ViewPager只有一个page,不可以左右滑动。...这里强调的是:既然ViewPager每次只展示最多3个page,而且左右滑动的逻辑可以每次滑动时进行检查,那么对于任意大的数据集合,它都应该不会卡顿。

2.2K70

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

这篇博客主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager...Activity的相关解决方法 于是我查找了相关的资料,Activity完美解决,主要要一下两种方法 第一种方法,重写Activity的onWindowFocusChanged()方法,在里面调用...里面嵌套ViewPager和RecyclerView,这种实现方式需要自己解决View滑动事件的冲突,同时还有我在上述提高的Fragment存在的问题 使用listView的addHeaderView...题外话 在这篇博客的最后提高的实现轮播图+list列表的几种实现形式,刚开始是不想写的,后面因为ScrollView里面嵌套ViewPager和RecyclerViewfragmentRecyclerView...抢占焦点,某些情况下用户体验不好,才写出来的,跟这篇博客要讲解的View滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015提出来的

62710

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager 导致的滑动冲突 轮播图的几种实现方式 文章首发地址CSDN:http://blog.csdn.net...Activity的相关解决方法 于是我查找了相关的资料,Activity完美解决,主要要一下两种方法 第一种方法,重写Activity的onWindowFocusChanged()方法,在里面调用...,这种实现方式需要自己解决View滑动事件的冲突,同时还有我在上述提高的Fragment存在的问题 - 使用listView的addHeaderView来实现,或者是通过多种不同的item来实现...题外话 在这篇博客的最后提高的实现轮播图+list列表的几种实现形式,刚开始是不想写的,后面因为ScrollView里面嵌套ViewPager和RecyclerViewfragmentRecyclerView...抢占焦点,某些情况下用户体验不好,才写出来的,跟这篇博客要讲解的View滑动事件冲突没有多大关系,只是给读者提供多种思路而已 至于CoordinatorLayout,是google IO 2015提出来的

5.6K51

ViewPager 详解(五)—–使用Fragment实现ViewPager滑动

添加标题栏的异同》 4、《ViewPager 详解(四)—-自主实现滑动指示条》 其它相关文章: 5、《Android Fragment完全解析,关于碎片你所需知道的一切》 6、《fragment嵌套...viewpager,vierpager中有多个fragment》 本篇效果图: 第一个页面加一个Btn 第一页面向第二页面滑动...第二页面向第三个页面滑动 一、概述 从前面几篇文章,我们知道,实现ViewPager是要有适配器的,我们前面用的适配器是PagerAdapter,而对于fragment,它所使用的适配器是...对于构造函数,这里申请了一个Fragment的List对象,用于保存用于滑动的Fragment对象,并在创造函数初始化: public FragAdapter(FragmentManager fm,List...4、可能出现的问题 问题:MainActivity,当写到这句:fragments.add(new Fragment1()); 向Fragment列表添加Fragement对象实例时,会提示“无法将

91420

Viewpager循环滑动的实现

导语 本文讲述实现ViewPager循环滑动效果的两种方案: 方案1: 复写ViewPager或者Adapter,扩展dataList,左右各加1。...核心思路就是将数据集的左右两侧加一条数据,分别是原来数据集的最后一条和第一条,在用户滑动到边界页面时自动跳转页面。 比如本来的页面有5页,对应5条数据,如下图: ?...postion为1的时候左滑,会跳转到展示内容为e的页面,当然这次跳转过程对用户是无感知的。...即a 和 e的缓存. •5.考虑刚好有2个数据的情况,重写getItemPostion方法: 因为b元素viewPager的位置有两个,0和2,同理a也是。...当前页面为b页时,左右两页都是a,返回的postion都是1,viewPager的排序过程中会把两个a页面都移动到b的左边,导致滑动异常。

1.2K60

android viewpager实现竖直滑动效果

做过android开发的朋友们,一定知道viewpager是什么,但是viewpager只能水平滑动。现在有的项目引导页也开始使用竖直滑动,这个时候viewpager就不能帮到我们了,怎么办?...只有自定义了,今天就简单讲下viewpager竖直滑动的实现,但是这是告诉大家怎么实现,具体肯定不能用于真实项目中,因为还有些细节没处理,只是给大家讲个思路而已!...detector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){ /** * distanceX 屏幕上要移动的距离...简单的说下 返回true表示自己处理了这个滑动事件。...返回false表示传递给子view,而当前这个父view就不再持有这个滑动事件了,想很好了解这个问题,就设计到view事件传递了,大家可以通过down,move,up下返回不同的值,打log去分析原理

1.5K30

处理 WebView 与 ViewPager 滑动冲突

问题场景 项目的App,有一个ViewPager,它内部包含了WebView,而内部的webview加载了一个可以滑动的网页。...当我们在网页滑动的时候,会直接切换到下一个viewpager的页面,而不是优先响应webview的滑动。...上面红框的内容就是overScroll的效果,其实就是划过了的意思(英语over有过的意思) 了解了上面的信息,我们具体的实施办法也就有了。...WebView的onTouchEvent事件为ACTION_DOWN时,查找父视图是否是可以滑动的视图(如ViewPager),如果是,则通过requestDisallowInterceptTouchEvent...(true)调用,请求父视图不要拦截touchEvent 如果WebView不再响应内部滑动(即onOverScrolledclampedX或者clampedY值为true),我们再起调用requestDisallowInterceptTouchEvent

2K20

android viewpager实现竖屏滑动效果

Viewpager 横向滑动效果系统就自带了很多种,比如这个 效果 ? 那如果做成竖屏的这种效果呢 。我百度过很多,效果都不是很好,有的代码特别多而且存在很多问题。...首先自定义Viewpager 是肯定必不可少的了 public class VerticalViewPager extends ViewPager { private OnItemClickListener...设置动画的方法 ,那么要实现这个如果用系统自带的切换动画效果的话 肯定是不符合Viewpager 竖屏滑动的效果的。...所以自定义PageTransformer 就是必然的趋势了 private class VerticalPageTransformer implements ViewPager.PageTransformer...然后得到如上gif 向左旋转90的效果,剩下的代码你们看看也就知道是item点击事件与滑动事件的监听。所以就不细讲了 以上就是本文的全部内容,希望对大家的学习有所帮助。

1.5K30

Android使用ViewPager实现左右无限滑动

前言 网上有很多使用ViewPager实现左右滑动这一效果的资料,这些资料大多数都是将PagerAdaptergetCount()方法的返回值设为Integer.MAX_VALUE使用户看不到边界...,然后instantiateItem()方法通过position%(要循环显示的数据集的长度)的方式取得对应的数据集。...这样虽然可以做到无限循环,但是会有两个弊端:首先会创建大量对象,容易引起内存溢出(循环加载图片)从而影响性能;其次从第一页向右滑动的时候是无法滑动的。...今天给大家分享的是另一种实现方式:创建三个图片视图放入ViewPager默认选中第二页,接下来的滑动每次滑动结束之后都将当前页码设置为第二页,然后通过判断是向左向右滑动来设置视图中的数据集,这样就可以实现无限循环了...method stub System.out.println("--onPageScrollStateChanged--state--:" + state); switch (state) { // 滚动完成后

2.5K30

Android使用ViewPager实现屏幕滑动效果

使用ViewPager实现屏幕滑动 从一个完整的屏幕移动到另一个屏幕的过程被称为屏幕滑动安装向导、幻灯片中应用广泛。...下面介绍如何利用Android Support库的ViewPager来实现屏幕滑动。...创建View 创建一个之后作为fragment的内容的布局文件,下面的例子包含一个Textview,用来展示一些文字。 <!...添加ViewPager ViewPager内嵌了对滑动手势的支持,因此它在默认设置下就能够实现屏幕滑动。 首先,创建一个布局文件,包含一个ViewPager: <!...屏幕滑动过程它会在那些能够看到的页面(当前页面以及邻近页面)上反复调用。例如,假设当前位于第三页,如果用户向第四页滑动,那么transformPage()会在第二、第三、第四页上被调用。

1.1K21

自定义无限循环ViewPager(二)――ViewPager滑动原理解析

自定义无限循环ViewPager分成以下三篇文章进行讲解: ViewPager初始化源码解析 ViewPager滑动原理解析 ViewPager方法改造实现无限循环 在前面一篇文章,已经分析了ViewPager...阅读本文之前,大家可以先去了解下Scroller的用法,以便大家更好的理解ViewPager滑动原理。...而ViewPager根据手势产生页面移动也正是因为重写了这两个方法。ViewPager存在两种移动方式: MOVE触摸事件,页面随手指的拖动而移动。...并且ViewPager的onPageScrolled将mCalledSuper设置为了true,用于判断子类有没有调用。...简单总结下,就是onInterceptTouchEvent()方法根据不同情况对mIsBeingDragged进行赋值,对触摸事件是否进行拦截;如果在MOVE事件是可滑动的,就调用performDrag

2.2K10

Android 使用ViewPager实现左右循环滑动图片

ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1....R.drawable.item05,R.drawable.item06, R.drawable.item07, R.drawable.item08}; //将点点加入到ViewGroup...layoutParams.rightMargin = 5; group.addView(imageView, layoutParams); } //将图片装载到数组..., 设置为长度的100倍,这样子开始就能往左滑动 viewPager.setCurrentItem((mImageViews.length) * 100); } /** *...当只有3张图片或者2张图片的时候,滑动存在BUG问题的修改如下 destroyItem(View container, int position, Object object)方法不removeView

2.6K30
领券