【问题标题】:ScrollView Ignore OnTouch while Scrolling?ScrollView 在滚动时忽略 OnTouch?
【发布时间】:2012-02-01 01:46:04
【问题描述】:

我有一个 ScrollView -> Table => TableRow,我动态地将 Rows 添加到其中,每一行内部都有一个 LinearLayout,我将 OnTouchListener 附加到它,然后当它被触摸时我会做一些事情。至少这是计划,我遇到的问题是,当您在 ScrollView 中滚动时,即使在滚动时它也会触发这些事件。我在 ScrollView 中拥有的其他控件(例如 Buttons、ImageButtons、EditText)不会发生这种行为

我的问题是,当 ScrollView 像 Button 和 EditText 字段一样滚动时,如何让 LinearLayout 忽略这些 OnTouch 事件?

【问题讨论】:

    标签: android


    【解决方案1】:

    在你的 onTouch 事件回调中添加一个 if 语句或 case 块来检查

    (me.getAction == MotionEvent.ACTION_CANCEL) 类似这样:

    else if (me.getAction() == MotionEvent.ACTION_CANCEL){
                     Log.i(myTag, "Action Cancel");
    
                     //This means we are scrolling on the list, not trying to press
    
    
    }
    

    我已经有很长时间没有研究它了,但我知道我必须在某一时刻解决这个问题,而现在快速浏览一下,我认为这是我必须做的才能让它工作.它会在列表滚动时继续接收回调,但对它们的操作应该是取消。因此,如果您设置某种 if 或 switch/case 来检查 action_cancel 并且当它为 true 时不执行任何操作,从用户的角度来看,onTouch 将“忽略”滚动时发生的事件。

    【讨论】:

    • 似乎不起作用 Tim,Action 只有一个值,它的 Down 或 Up,它似乎从来没有 Cancel 作为它的值...
    • 哇,在痛苦地测试了近 100 种不同的方法之后,确定方法是您必须在获得 Cancel 和 Move 事件之前调用 setClickable(true),否则您得到的只是 Down/向上
    • 我想在此添加我的经验,触摸事件以 Down -> Cancel -> Move 的形式出现,如果调用 Cancel,Android 会自动为您取消 Up 事件。如果您需要在向下突出显示某些内容,然后在向上取消突出显示并采取行动,这是有问题的。我通过在 Down 中使用 100 ms 的 Handler 延迟和在 Up 中使用 150 ms 的 Handler 延迟来解决这个问题。这样,如果用户触摸这些项目并滚动,UI 上绝对不会发生任何变化,如果他们按住某个项目,您将得到 Down 但没有 Cancel,以修复我也立即取消突出显示。
    • @FoamyGuy 非常感谢......你拯救了我的一天......+1 投票给你......再次感谢
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多