【问题标题】:Overlapping scrollviews重叠的滚动视图
【发布时间】:2012-01-04 20:01:47
【问题描述】:

我有一个问题...我在绝对布局中有两个滚动视图。换句话说,它们是全屏的并且相互重叠

顶部滚动视图是水平滚动视图,底部滚动视图是垂直滚动视图。

当我水平滚动时,我希望顶部滚动,当我垂直滚动时,我希望底部滚动。

但我的问题是水平滚动视图会接收所有滚动事件,因此底部的滚动视图永远不会收到滚动事件...

我该如何解决这个问题?

提前致谢!

【问题讨论】:

  • 我还注意到您使用了已弃用的 AbsoluteLayout。主要是因为现在屏幕尺寸和分辨率都不同了。它在您的模拟器或手机上可能看起来很棒,但请尝试将其放在平板电脑或其他手机上(看起来不正确)。只是提醒一下。
  • 我使用 fill_parent 所以滚动视图总是全尺寸:)

标签: android scrollview overlapping


【解决方案1】:

嵌套它们怎么样?您可以通过填充和边距使其在视觉上看起来相同,此外您可以控制哪个视图处理触摸。

我不确定你是否可以说一个滚动视图应该只处理水平,另一个只处理垂直 - 可能不是。但是您可以在两者中覆盖 onTouchEvent 和 onInterceptTouchEvent 来定义您需要的任何行为! (查看http://developer.android.com/reference/android/view/GestureDetector.html

例如,如果您希望父滚动视图仅处理垂直滚动,而子滚动视图处理水平滚动,则应该

-override onInterceptTouchEvent(Event e) {
      if (e.getAction() == ACTION_DOWN){
        //dispatch the call manually to the scroll view below you 
        mChild.onTouchEvent(e);
        super.onTouchEvent(e);
      }
      if (e.getAction() == ACTION_MOVE && the move is horizontal){
         mChild.onTouchEvent(e);
      } else {
         super.onTouchEvent(e); 
     }
      return true;
}

}

或者类似的东西。不是你应该做什么,但你明白了。

【讨论】:

    【解决方案2】:

    您可能需要为此实现自定义控件。您将需要一个 Scroller 类用于您的自定义控件。也可以下载source code for ScrollView class,修改为双向。

    并且不要将可滚动的东西放入其他可滚动的东西中——它们往往会争夺触摸事件。

    【讨论】:

    • 但这有什么帮助呢?如果之前有其他东西占用,底层视图将永远不会获得触摸事件?
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多