目的是为了参照小说阅读器,点击某区域可翻页,所以就需要用到 setOnTouchListener
来监听用户触摸,主要用到两个手势: 手指触摸屏幕,手指离开屏幕。

代码如下

float Vp_Width=1;vp.post(new Runnable() {@Overridepublic void run() {Vp_Width = (float)vp.getWidth();}});vp.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN:down = event.getRawX();break;case MotionEvent.ACTION_UP:up = event.getRawX();Log.e("wj","down :"+down+"  up :"+up);float abs_distance = Math.abs(up-down);//滑动距离过短,不会触发翻页,需要人为触发if(abs_distance/Vp_Width <= 0.3){if(down/Vp_Width <= 0.3){if(vp.getCurrentItem()>0) {vp.setCurrentItem(vp.getCurrentItem() - 1);//消费掉触摸事件,防止 vp.setCurrentItem()不生效return true;}}else if(down/Vp_Width>=0.7){Log.e("wj","start"+vp.getCurrentItem());if(vp.getCurrentItem()<viewPagerAdapter.size-1){vp.setCurrentItem(vp.getCurrentItem()+1);return true;}}}break;}return false;}});

主要思路就是:记录用户手机触摸屏幕时的位置以及用户手指离开屏幕时的位置,

如果这二者之间的距离跟viewpager的宽的比值小于某个值(我设置的30%),即不会触发自带的翻页动画,需要我们代码设置翻页(模拟小说阅读器的点击翻页)。

最重要的就是这个返回值,如果返回false,即代表我们没有在return前面消费掉本次事件,这个时候就算我们代码设置了翻页,return false也会触发一次它自带的翻页事件,即没有达到一定的滑动距离,不会翻页,就造成了代码设置翻页的无效,所以我们需要告知我们已经消费了本次事件,以免触发其他事件。如上代码,我在vp.setCurrentItem后return true。即代表我消费了本次事件,其他事件就不要触发了。

vp.setOnTouchListener 配合 vp.setCurrentItem 未触发相关推荐

  1. performActionForShortcutItem方法未触发

    performActionForShortcutItem方法未触发 在iOS13之前我们使用3DTouch的时候不论是通过info.plist或者代码添加快捷方式都会在用户使用时调用 - (void) ...

  2. PureComponent: setState未触发render渲染

    之前一般都是使用Component的比较多,所以对PureComponent了解比较少.最近在使用PureComponent的时候遇到一些问题,就是setState未触发render渲染的问题: 两者 ...

  3. sql 触发器未触发_学习SQL:SQL触发器

    sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...

  4. sql 触发器未触发_SQL触发器–综合指南

    sql 触发器未触发 Hey, folks! In this article, we will be focusing on SQL Triggers in detail. 嘿伙计! 在本文中,我们将 ...

  5. epoll EPOLLOUT事件未触发

    记录一次epoll事件未触发的经历,由于是tcp通信,使用了io多路复用epoll,客户端只发送数据,不处理服务端响应,服务端处理对应的事件,并且会响应消息给客户端,遇到了EPOLLOUT事件未触发的 ...

  6. mvc4.0 html.actionlink comfired,未触发MVC 5远程验证

    我正在尝试在MVC中实现远程验证.我已经阅读了一些Tutos和已经在此处发布的问题,但是没有答案. 控制器: public class GroupsController: Controller { [ ...

  7. html ondrop未触发,javascript – TableDnD onDrop事件未触发

    我确定这是非常简单的东西,通常是. $('#sort-table').tableDnD({ onDragClass: "dnd_drag",onDragStart: functio ...

  8. android usb attached,android – USB_DEVICE_ATTACHED意图未触发

    有没有人能够得到android.hardware.usb.action.USB_DEVICE_ATTACHED"工作? 好的,所以我试图使用新的usb主机模式功能来检测何时连接一个USB设备 ...

  9. springboot、quartz定时任务未触发

    spring boot.quartz定时任务不触发 定时每隔5分钟触发一次 但是定时任务没有触发,不知道为什么? 若您知道原因,请留言谢谢 解决办法 针对多模块,若要一个web模块启动定时器模块,那么 ...

最新文章

  1. linux 安装gcc4.2,Linux操作系统下安装gcc4.2.*的方法
  2. 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...
  3. MYSQL: DML/DDL/DCL
  4. 温州大学《机器学习》课程课件(二)(回归)
  5. 为什么喝酒有的人会脸红,有的人会脸发白
  6. scrapy分布式爬虫爬取淘车网
  7. 编写jmeter测试用例_JMeter 编写接口测试用例遇到的问题及解决
  8. MySQL日志:binlog、事务日志(redo、undo)
  9. Django+Vue前后端分离项目的部署
  10. 创建私服maven服务
  11. java实现打印功能_Js 打印功能的实现(Java)
  12. 怎样保存CAD图纸到电脑桌面呢?
  13. wps或者word点击打印预览时出现空白页,不显示内容
  14. c语言实现freqspace函数,滤波器程序
  15. html文件里面的中文乱码
  16. 球体积公式计算4/3PIr*r*r,编写一个程序输入半径,求体积
  17. TTL232和RS232的区别
  18. Google play上架被拒踩坑系列
  19. 英语口语收集(十九)
  20. exchange rate维护

热门文章

  1. 浅谈网络游戏的设计——服务器端编程
  2. 离线地图开发--BigeMap(离线地图服务器构建,支持百度、谷歌、高德等地图)
  3. 爱奇艺:空有奈飞梦,没有奈飞命
  4. 计算机辅助设计二维三维图纸绘制AutoCAD 2022中文
  5. leaflet加载腾讯地图 (路网、影像、地形) 示例教程034
  6. nik collection mac中文版插件内容
  7. html文章分栏显示,PPT文章如何进行分栏显示?
  8. java实现一个简单的单链表存放水浒传人物
  9. python分析中的mode()
  10. 大数据信息资料采集:商品促营销活动海报设计模板八爪鱼采集规则