触摸时 ACTION_CANCEL

2024-02-14

我有以下类,它代表一个可触摸的视图并绘制一个滑动条。

public class SlideBar extends View {
private int progress;
private int max;

private Paint background;
private Paint upground;

private RectF bar;

private boolean firstDraw;

public SlideBar(Context context, AttributeSet attrs) {
    super(context, attrs);
    progress = 0;

    upground = new Paint();
    upground.setColor(Color.parseColor("#C2296C"));

    background = new Paint();
    background.setColor(Color.parseColor("#777777"));
}

private void onFirstDraw() {
    max = getWidth();
    bar = new RectF(0, 19, max, 21);
}

public void onDraw(Canvas canvas) {
    if (!firstDraw) {
        onFirstDraw();
        progress = max;
        firstDraw = true;
    }

    canvas.save();
    canvas.drawRoundRect(bar, 5, 5, background);
    canvas.drawCircle(progress, 20, 9, upground);
    canvas.restore();
}

public void setValue(int value) {
    progress = value;
}

public boolean onTouchEvent(MotionEvent evt) {
    System.out.println(evt.getAction());
    progress = (int) evt.getX();
    invalidate();
    return false;
}
}

但是当触摸并拖动它时,我收到一个 ACTION_DOWN,一些 ACTION_MOVE 然后收到一个 ACTION_CANCEL 并且没有进一步的事件。

为什么会出现这样的情况呢?我不想取消该事件并使其继续拖动栏。


当父容器拦截您的触摸事件时,就会发生这种情况。任何覆盖的 ViewGroupViewGroup.onInterceptTouchEvent(MotionEvent) http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent%28android.view.MotionEvent%29可以做到这一点(例如 ScrollView 或 ListView)。

处理这个问题的正确方法是调用ViewParent.requestDisallowInterceptTouchEvent(布尔值) http://developer.android.com/reference/android/view/ViewParent.html#requestDisallowInterceptTouchEvent%28boolean%29一旦您认为需要保留运动事件,请在您的父视图上使用方法。

这是一个简单的示例(attemptClaimDrag 方法取自 android 源代码):

/**
 * Tries to claim the user's drag motion, and requests disallowing any
 * ancestors from stealing events in the drag.
 */
private void attemptClaimDrag() {
    //mParent = getParent();
    if (mParent != null) {
        mParent.requestDisallowInterceptTouchEvent(true);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (iWantToKeepThisEventForMyself(event)) {
            attemptClaimDrag();
        }
        //your logic here
    } else {
        //your logic here
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

触摸时 ACTION_CANCEL 的相关文章

  • Whatsapp 在 Android 中共享音频文件时正在剪切音频文件

    我在共享格式不是 mp3 的音频文件时遇到问题 文件被共享 但长度较短 例如 如果文件有 10 秒 则仅共享 5 秒 如果我使用 mp3 格式 它会完全共享 但其他格式会出现问题 注意 该文件在其他应用程序 如Messenger 中共享没有
  • Android 构建 gradle 在特定设备上失败

    我面临一个奇怪的问题 当我编译我的应用程序以在 Android 7 0 的设备上运行它时 它可以工作 但是当我尝试为 Android 4 2 1 的设备进行编译时 它会失败并出现以下错误 错误 任务 app transformClasses
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • 任务“:app:checkReleaseDuplicateClasses”执行失败

    我的 React Native Android 构建中突然出现构建问题 令人惊讶的是 它是早上建好的 没有做任何改变 但突然就失败了 这就是我得到的错误 知道为什么会发生这种情况吗 在 stack 和 GitHub 中也看到了一些类似的问题
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • android studio 底部工具栏的“运行”选项卡消失了

    Android Studio 底部工具栏中曾经有一个 运行 选项卡 但该选项卡不再显示 怎么把它带回来 请检查下图以了解它消失之前的位置 Run 选项卡曾经位于 TODO 选项卡之前的红色圆圈中 查看 gt 工具窗口 gt 运行 Or us
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • BluetoothLeScanner 服务内部问题

    Update从Android 10以上我认为你需要ACCESS BACKGROUND LOCATION权限 因此 如果此代码在最新的 Android 版本上不起作用 就是针对此问题的 ACCESS BACKGROUND LOCATION 受
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • 在android中的日期选择器对话框中显示当前日期

    我多次尝试在日期选择器对话框中显示当前日期 但失败了 它显示 1 1 1990 我已经遵循了堆栈溢出的一些答案 但不幸的是这些对我不起作用 谁能解释一下在日期选择器对话框中显示当前日期的代码 谢谢 It may help you publi
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • 具有不同高度项目的网格布局(React Native)

    Any idea for implementing a grid layout like the following image 答案取决于您要显示的数据 我想这是一个无限列表 向下滚动时会加载更多项目 如果是这种情况 你需要输入 3Lis
  • 流畅的 NHibernate QueryOver 选择不在另一个表中的项目(左连接)

    我有两张桌子 all 编号 丙A 道具B 其他一些专栏 hidden 编号 丙A 道具B 和相应的类 已映射 尚未映射关系 我想从第一个表中获取所有行 减去匹配的任何结果propA or propB财产 我设法通过 Criteria API
  • 重定向 Rails 4 中特定控制器的记录器输出

    我根据上一个问题的答案构建了一个解决方案重定向 Rails 3 中特定控制器的记录器输出 https stackoverflow com q 28821668 56082对于 Rails 3 它工作得很好 但是现在我尝试将相同的基于中间件的
  • buildQueryString 函数的 Purescript 类型

    我是 Purescript 的新手 我正在尝试编写一个函数 可以获取任何记录值并迭代字段和值并构建 一个查询字符串 我在想这样的事情 buildQueryString forall a PropertyTraversible r gt r
  • 复选框操作

    由于某种原因 这段小代码阻止用户检查实际的复选框并将复选标记放入其中 而检查它的唯一方法是单击该行 table tr click function checkBox this children td children input type
  • Cygwin git Push 挂起,msysgit 还好

    我使用代理 而且我对 git 很陌生 而且我使用的是 Windows XP 我已经能够制作一个git push origin master从 msysgit 工作 但无法使用 Cygwin 的 git 在 Cygwin 中工作 我在两个环境
  • 如何在 ASP Dropdownlist 列表项中使用彩色圆圈? (没有 jQuery)

    Goal 我想要一个下拉列表 如果某人的可用性为 True 则显示绿色 如果某人的可用性为 False 则显示红色 注意 我需要在没有 jQuery 的情况下完成此操作 我刚刚被告知我们不允许在我们的项目中使用 jquery 问题 背景 我
  • 允许双 URL 编码的请求路径有效

    我有一个在 IIS 7 0 上运行的标准 ASP Net WebForms 应用程序 带有集成托管管道 我们网站上的许多图像的文件名中都有空格 例如 baseball drawing gif 当我们将这些图像放入 html 页面时 我们对路
  • 使用参数调用事件处理程序[重复]

    这个问题在这里已经有答案了 我正在尝试使用参数调用事件处理程序 它工作得很好 没有争论 我这里哪里出错了 var box box function changeColor a this css background a box click
  • ForeignKey(User, unique=True) 和 OneToOneField 之间的区别[重复]

    这个问题在这里已经有答案了 之间有什么不同models ForeignKey Modelname unique True and models OneToOneField在姜戈 我应该在哪里使用models OneToOneField an
  • TextField maxLength - Android Jetpack Compose

    是否有任何开箱即用的解决方案来限制 TextField 中的字符大小 我没有看到任何像 XML 中那样的 maxLength 参数 您可以使用onValueChange参数限制字符数 var text by remember mutable
  • 左平衡二叉树

    我正在读一本关于数据结构的书 它说左平衡二叉树是一棵树 其中叶子仅占据最后一层的最左边位置 这对我来说似乎有点模糊 这是否意味着叶子仅位于根的左侧并分布在整个级别 或者叶子仅存在于整个树的左侧 究竟什么构成左平衡 我不确定我的猜测是否涵盖了
  • 如何将菜单项添加到 iOS 中的共享菜单

    我刚刚开始进行 iOS 开发 但我必须尽早做的事情是向系统菜单添加一个按钮 就像 Dropbox 在与电子邮件附件交互时添加按钮一样 该应用程序将用于视频 因此在共享菜单上为 QuickTime 播放器添加一个按钮将是理想的选择 我浏览了文
  • 使用 HMAC 或 OpenSSL 进行 URL 签名

    我对 url 签名感兴趣 例如 但我有一些要求 但我还没有解决方案 我将使用PHP or Python对于页面 所以我需要能够使用两者之一来签名和验证签名 我的计划是使用 priv pub 密钥方案来签署一些数据 并能够验证签名是否有效 但
  • 在用户因超时注销之前显示一条消息

    我们有一个使用 Devise 进行身份验证的 Rails 4 应用程序 我们想 在用户会话自动过期前 1 分钟向用户发送消息 让用户单击此消息上的按钮以继续他 她的会话 自动将用户发送到登录页面 并在其会话过期时显示一条消息 是否有任何 D
  • 在图片框中运行另一个应用程序

    这是我用来在图片框中运行另一个应用程序的示例代码 Imports System Diagnostics Imports System Runtime InteropServices Public Class Form1
  • Go 中在 EOF 上重新连接 TCP

    我有以下内容 In an init func if logStashHost lsconn err net Dial tcp logStashHost ToLogStash rec lsconn 然后两个函数 func ReadLogSta
  • 解压内容应用内购买ios

    如果进行应用内购买 Apple 托管的内容将以 zip 格式下载 我尝试解压缩这些内容 但提交使用 zipArchive 打开 zip 文件 ZipArchive za ZipArchive alloc init za delegate s
  • 针对类实现 QProgressBar

    我的 PyQt 程序有 2 个小部件 选择文件等 然后是一个显示解析文件结果的主窗口 该程序非常适合小型样本文件 但是当尝试解析较大的文件时 它会挂起 显示 未响应 然后在大约 30 秒左右后显示结果 我想在主窗口打开之前实现一个 QDia
  • 触摸时 ACTION_CANCEL

    我有以下类 它代表一个可触摸的视图并绘制一个滑动条 public class SlideBar extends View private int progress private int max private Paint backgrou