gpt4 book ai didi

Android StateListDrawable 在 MultiTouch 之后保持按下状态

转载 作者:行者123 更新时间:2023-11-29 02:08:35 26 4
gpt4 key购买 nike

我有一个 ListView ,其中列表项具有以下可绘制背景

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/transparent" />
<item android:state_pressed="true"
android:drawable="@drawable/collection_item_gradient" />
</selector>

当按下列表项时,它会应用渐变。然而,如果用户随后发起了一个多点触摸事件(比如在 ListView 之外的某处放置了一个额外的手指),则列表项可能会保持按下状态,直到 ListView 接收到另一个触摸事件。

有解决办法吗?

最佳答案

这在某种程度上取决于您要完成的任务...

如果您希望在用户两根手指按下时显示第三种背景类型,则没有可直接引用来完成的可绘制状态。您将不得不合作在触摸模式中不常使用的现有状态之一(例如选定状态),并在列表项的对象上实现自定义触摸处理程序以设置该状态。例如,执行 onTouchEvent()在每个列表项的 View 中(或者添加 onTouchListener() 如果您没有自定义类),查找 ACTION_POINTER_DOWN事件告诉你第二根手指掉下来了,然后调用setSelected()在 View 上触发您为 android:state_selected 设置的可绘制对象在你的<selector> .

如果只想清除这种情况下的状态,可以在检测到多于一根手指时取消触摸事件。在这种情况下,您正在考虑自定义 ListView.onInterceptTouchEvent()寻找 ACTION_PONTER_DOWN 的方法事件和返回 true .这将教 ListView用第二根手指从它的子项中窃取触摸,这将取消列表项的按下状态。确保回拨至 super在这种情况下,您不会破坏所有现有逻辑 ListView用于滚动等。

注意现有 AbsListView 的情况实现可能会妨碍您。例如,当前执行 onIntercepTouchEvent()寻找 ACTION_POINTER_UP为了将主触摸手指从第一个切换到第二个。如果您没有意识到,此行为可能会在您的自定义中导致奇怪的伪影。

HTH.

关于Android StateListDrawable 在 MultiTouch 之后保持按下状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662271/

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