gpt4 book ai didi

android - 附加了 OnClickListeners 的 View 会减慢 ScrollView 的速度。可以做什么?

转载 作者:搜寻专家 更新时间:2023-11-01 07:40:28 25 4
gpt4 key购买 nike

所以,基本上,我有一个 ScrollView,其中添加了许多不同的 ViewGroup 和 View,我的 Activity 应该响应对这些 View 的点击。不幸的是,我为它们设置的 OnClickListeners 会减慢 ScrollViews 对更快滚动或滑动手势的 react 时间(当它们在有问题的 View 上启动时)。

有什么方法可以解决这个问题或解决这个问题吗?

最佳答案

是的,我不确定降低布局的复杂性是否对您有帮助。您的设备/模拟器运行的是哪个 API 版本?因为我注意到从 2.1 到 2.2 围绕在可点击 View 上启动滚动事件发生了变化,正如您所描述的。

在我的例子中,我使用 requestDisallowInterceptTouchEvent() 方法启用嵌套滚动。通常,这将允许我将一个 ScrollView 或 ListView 放在另一个 ScrollView 中,并且仍然可以正确滚动。但是,从 API 级别 8 开始,如果触摸事件在“可点击”控件上启动,则此“嵌套滚动”将不再有效!啊!我没有查看来源以确定它发生的确切原因,但听起来它与您的问题有关。

因此,最近可点击控件使用触摸事件的方式似乎发生了变化,这在某些情况下会对它们的父级产生不利影响。我怀疑是否有解决方案。

编辑:
如果您想以另一种方式实现“点击”,那当然是可能的。我通常不会推荐它,但我不知道你的滚动性能有多糟糕。由你决定。

如果您想这样做,您可以将 OnTouchListener 添加到您的 ScrollView,但我认为这样做会更难。您必须监听 ACTION_UP 事件,但仅当相应的 ACTION_DOWN 事件小于 touchSlop 时才使用这些事件方向(touchSlop 是在 ListView 开始滚动之前触摸必须移动的最小距离...它从 ViewConfiguration 获取此值) .然后,当您使用该事件时,您必须将 ListView.getScrollX()ListView.getScrollY() 添加到事件的坐标中以便进行比较到可点击控件的位置。如果你想要“长时间点击”,你将不得不做更多的工作来实现这些。而所有这些仅适用于触摸事件……您还需要添加一个关键监听器,以便您的用户可以使用轨迹球来单击它。

我认为您可以向每个控件添加一个 OnTouchListener,而不是 OnClickListener。检查查看源代码以查看点击是如何注册的。如果您不需要能够注册“长按”,那么对您来说会容易得多。然后,您将能够将几乎所有 ACTION_UP 事件视为点击。您还需要一个关键监听器来处理轨迹球点击。

对于轻微的滚动问题,似乎需要做很多工作。我想知道我是否没有正确理解这个问题,它是否真的是一个比我想象的更严重的问题?

关于android - 附加了 OnClickListeners 的 View 会减慢 ScrollView 的速度。可以做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com