博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何通过在ViewPager中用手指轻扫来禁用分页,但是仍然能够以编程方式轻扫?
阅读量:2289 次
发布时间:2019-05-09

本文共 4033 字,大约阅读时间需要 13 分钟。

本文翻译自:

I have ViewPager and below it I have 10 buttons. 我有ViewPager,在它下面有10个按钮。 By clicking on button, for example #4, the pager goes immediately to page #4 by mPager.setCurrentItem(3); 通过单击按钮,例如#4,通过mPager.setCurrentItem(3); ,寻呼机立即转到第4页mPager.setCurrentItem(3); . But, I want to disable the paging by swiping with finger horizontally. 但是,我想通过水平滑动手指来禁用分页。 Thus, the paging is done ONLY by clicking on the buttons. 因此, 只能通过单击按钮来完成分页。 So, how I can disable the swiping with finger? 那么,如何禁用手指滑动?


#1楼

参考:


#2楼

The simplest way is to setOnTouchListener and return true for ViewPager . 最简单的方法是setOnTouchListener并为ViewPager返回true

mPager.setOnTouchListener(new OnTouchListener()    {                   @Override        public boolean onTouch(View v, MotionEvent event)        {            return true;        }    });

#3楼

The more general extension of ViewPager would be to create a SetPagingEnabled method so that we can enable and disable paging on the fly. ViewPager的更一般的扩展是创建SetPagingEnabled方法,以便我们可以即时启用和禁用分页。 To enable / disable the swiping, just overide two methods: onTouchEvent and onInterceptTouchEvent . 要启用/禁用刷卡,只需覆盖两个方法: onTouchEventonInterceptTouchEvent Both will return "false" if the paging was disabled. 如果禁用分页,则两者都将返回“ false”。

public class CustomViewPager extends ViewPager {    private boolean enabled;    public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        this.enabled = true;    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (this.enabled) {            return super.onTouchEvent(event);        }        return false;    }    @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        if (this.enabled) {            return super.onInterceptTouchEvent(event);        }        return false;    }    public void setPagingEnabled(boolean enabled) {        this.enabled = enabled;    } }

Then select this instead of the built-in viewpager in XML 然后选择它而不是XML中的内置viewpager

You just need to call the setPagingEnabled method with false and users won't be able to swipe to paginate. 您只需要使用false调用setPagingEnabled方法,用户将无法滑动以进行分页。


#4楼

Better to declare it styleable, so you can change its property from xml: 最好声明它为可样式化,因此可以从xml更改其属性:

private boolean swipeable;public MyViewPager(Context context, AttributeSet attrs) {    super(context, attrs);    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager);    try {        swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true);    } finally {        a.recycle();    }}@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {    return swipeable ? super.onInterceptTouchEvent(event) : false;}@Overridepublic boolean onTouchEvent(MotionEvent event) {    return swipeable ? super.onTouchEvent(event) : false;}

And in your values/attr.xml: 并在您的values / attr.xml中:

so that you can use it in you layout xml: 这样就可以在布局xml中使用它:

Of course, you can still have a get/set property. 当然,您仍然可以拥有一个get / set属性。


#5楼

I needed to disable swiping on one specific page, and give it a nice rubber-band animation, here's how: 我需要禁用在特定页面上的滑动,并给它一个漂亮的橡皮筋动画,方法如下:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {        @Override        public void onPageScrolled(int position, float positionOffset,                                   int positionOffsetPixels) {            if (position == MANDATORY_PAGE_LOCATION && positionOffset > 0.5) {                mViewPager.setCurrentItem(MANDATORY_PAGE_LOCATION, true);            }        }

#6楼

Another easy solution to disable swiping at specific page (in this example, page 2): 禁用特定页面(在此示例中为第2页)上的滑动的另一种简单解决方案:

int PAGE = 2;viewPager.setOnTouchListener(new View.OnTouchListener() {        @Override        public boolean onTouch(View v, MotionEvent event) {        if (viewPager.getCurrentItem() == PAGE) {                viewPager.setCurrentItem(PAGE-1, false);                viewPager.setCurrentItem(PAGE, false);                return  true;        }        return false;}

转载地址:http://yscnb.baihongyu.com/

你可能感兴趣的文章
[Java并发编程实战] 第8章 线程池的使用
查看>>
[Java并发编程实战] 第9章 图形用户界面应用程序
查看>>
[Java并发编程实战] 第10章 避免活跃性危险
查看>>
[Java并发编程实战] 第11章 性能与可伸缩性
查看>>
[Java并发编程实战] 第12章 并发程序的测试
查看>>
[Java并发编程实战] 第13章 显式锁
查看>>
[Java并发编程实战] 第14章 构建自定义的同步工具
查看>>
[Java并发编程实战] 第15章 原子变量与非阻塞同步机制
查看>>
[高性能MySQL] 第1章 MySQL架构与历史
查看>>
[面试] 找实习面试时问到的跟项目、分布式和数据库有关的问题
查看>>
[Docker] 使用Docker-compose部署Neo4j
查看>>
[Neo4j] CQL命令
查看>>
[Neo4j] 添加算法插件包
查看>>
[Neo4j] Spring Boot项目访问Neo4j报错
查看>>
[Docker] 两份docker-compose.xml共用一个network
查看>>
数据总线和地址总线的纠葛
查看>>
iar注释快捷键
查看>>
ubuntu16.04 okular中文界面
查看>>
Intel Core系列CPU架构演变
查看>>
同步,异步 and 阻塞,非阻塞
查看>>