ViewPager 中区分用户滚动和程序化页面更改

2024-01-07

我有一个android.support.v4.view.ViewPager在我的应用程序中,我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动。

我看过ViewPager.OnPageChangeListener我相信答案可能就在那里,但我只是不确定如何。


好吧,事实证明我的答案是正确的ViewPager.onPageChangeListener。特别是它在于使用onPageScrollStateChanged(int state)。本质上,页面中的页面有三种状态:ViewPager可以在:

  1. 拖动:表示寻呼机当前正在被用户拖动。
  2. 空闲:表示寻呼机处于空闲、固定状态。
  3. 正在稳定:表示寻呼机正在稳定到最终位置。

因此,拖动状态仅在当前页面被用户物理拖动时发生。因此,当用户滑动页面时,状态按以下顺序发生:拖动 -> 稳定 -> 空闲。现在onPageSelected(int position)方法在“Setting”和“Idle”状态之间调用。因此,为了确定页面更改是否是由用户滚动引起的,只需检查先前状态是否为“拖动”以及当前状态是否为“设置”。然后你可以保留一个boolean变量来跟踪页面更改是否是用户发起的,并在您的onPageSelected(int position) method.

这是我的onPageScrollStateChanged method

public void onPageScrollStateChanged(int state) 
{
    if (previousState == ViewPager.SCROLL_STATE_DRAGGING
            && state == ViewPager.SCROLL_STATE_SETTLING)
        userScrollChange = true;

    else if (previousState == ViewPager.SCROLL_STATE_SETTLING
            && state == ViewPager.SCROLL_STATE_IDLE)
        userScrollChange = false;

    previousState = state;
}

The if and else if陈述不必如此明确,但我这样做是为了清楚起见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewPager 中区分用户滚动和程序化页面更改 的相关文章

随机推荐

  • jq:错误:test1/0 未在 处定义,第 1 行

    我有下面的 JSON 文件 并且在尝试在 shell 中动态向数组添加值时遇到错误 下面是一个 tmp json 文件 environments integration testing for jenkins job prod stagin
  • 使用 C# 驱动程序从 mongo 集合中获取 DateTime

    我有以下对象 public class QueueItem public long id get set public SiteMapRequestState State get set public int WorkerId get se
  • 如何查找Android设备的序列号?

    我需要为 Android 应用程序使用唯一的 ID 并且我认为设备的序列号是一个不错的选择 如何在我的应用程序中检索 Android 设备的序列号 TelephonyManager tManager TelephonyManager myA
  • 如何在 QML 中设置 MessageDialog 的默认按钮?

    默认按钮是 是 但我想将按钮 否 设置为默认按钮 怎么做 我看不到任何方法可以通过当前的方式实现这一目标MessageDialogAPI 但我也认为这是特定于平台的 这就是它被隐藏的原因 不过 您可以创建自己的对话框 import QtQu
  • 通过定时器写入数据库的后台任务

    如何在后台的计时器上写入数据库 例如 检查邮件并向数据库添加新信件 在示例中 我在写入数据库之前简化了代码 Microsoft 示例中的类名称 录音类本身 namespace EmailNews Services internal inte
  • Camunda 无法执行 groovy 脚本

    这是我的依赖项 compile group org camunda bpm springboot name camunda bpm spring boot starter webapp version 3 0 0 compile group
  • 文件浏览器java

    我希望在 Java 应用程序中拥有某种文件浏览器 例如 Windows 资源管理器 我只想要能够递归列出文件夹内文件的东西 有没有一种简单的方法可以做到这一点 我已经尝试使用 JFileChooser 但这不是我想要的 此代码片段允许您递归
  • TextView android:ellipsize="marquee" 未按预期工作

    我在 ListView 中有一些自定义元素 据了解 每个元素只是 LinearLayout 中的 TextView 当文本太长时 我希望 TextView 内的文本成为水平滚动的单行 我阅读了很多关于此问题的文章 并提出了一个应该可行的解决
  • 这是“标签调度”吗?

    假设我有一些代码 void barA void barB void fooA Duplicate code barA More duplicate code void fooB Duplicate code barB More duplic
  • html中元素的排列

    可以使用 html css 实现这种结构吗 但我不想在橙色块之间留出垂直空间 而是想成为一个在另一个块的顶部 我已经使用了 flex 和 grid 但到目前为止还没有真正成功 jsfiddle https jsfiddle net 3uxc
  • VSCode 不会导入 java.awt 包

    我在我的java类中实现了ActionListener 但是当我尝试自动导入 Shift Alt O 时 它给出了这个错误 运行贡献的命令 vscode delegate cmd ksicrwzq 失败 整个代码在这里 import jav
  • 编译器错误消息:CS0433

    我会突然出现一条奇怪的错误消息 我是一个初学者 用 C 在 ASP NET 中构建一个网站 发现错误的文件是 ascx 用户控制文件 编译器错误消息 CS0433 两者中都存在类型 链接 Temporary ASP NET Files ro
  • package.json 中的本地依赖项

    我想做这样的事情 所以npm install还安装了package json of somelocallib或者更重要的是它的依赖关系 dependencies express somelocallib npm gt 2 0 0 这个功能是
  • 错误模块“QtQuick”版本 2.12 未安装

    我已经安装了 Qt 4 5 0 社区 我正在尝试使用以下命令构建我的项目Qt5 10 0 MinGW 32位 将 QtQuick 2 12 导入到 qtquick 项目的 qml 文件中后 我遇到以下错误 模块 QtQuick 版本 2 1
  • 使用 OData 服务时无法加载资源

    你好 社区 我需要一些帮助 我的 odata 服务已经在运行 并且我有一个像这样的网址 https myclient port sap opu odata SAP servicename SRV MaterialListSet https
  • 更新到 ASP NET 5 beta5 破坏了一切

    我在更新到 beta5 时遵循了本指南 并且更新过程似乎有效 http blogs msdn com b webdev archive 2015 06 30 asp net 5 beta5 now available aspx http b
  • 处理 Array#map 内 async/await 中的错误(拒绝)

    节点 8 1 2 我有一个结构 其中一个文件在映射中调用另一个文件的函数 在一个真实的例子中我会使用Promise all on the map但这不是这里的问题 结构如下 A js const b require B function e
  • 将 GUID 转换为 varchar(32)

    我怎样才能转换一个GUID36字符到 VARCHAR 32 我正在尝试将数据从一个表复制到另一个表 这两个表中有两个相似的列 表1 colx是一个 GUID 所以它是36由于连字符而导致的总字符长度 对应的列是表2 colx但它是一个 VA
  • 添加这个按钮是什么

    How can i add what s this button besides close button i have seen lot of threads where they want to remove it but not a
  • ViewPager 中区分用户滚动和程序化页面更改

    我有一个android support v4 view ViewPager在我的应用程序中 我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动 我看过ViewPager OnPageChangeListener我相信答案可能就在那里 但我