【问题标题】:Using ScrollViews layout into HorizontalScrollView在 Horizo​​ntalScrollView 中使用 ScrollViews 布局
【发布时间】:2012-06-27 20:33:44
【问题描述】:

我想创建一种卡片布局,其中包含 ListView 布局的卡片在 HorizontalScrollableView 内,可以水平滚动卡片。一切正常,但滚动有问题。只有当我不水平滚动卡片时,我才能垂直滚动列表视图,反之亦然。

这是主容器:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <HorizontalScrollView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ddd" >

        <LinearLayout
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:orientation="horizontal" >
        </LinearLayout>
    </HorizontalScrollView>



</RelativeLayout>

我膨胀并将列表视图项添加到线性布局。 我希望在没有这些限制的情况下平滑垂直和水平滚动(同时水平和垂直滚动)。

我怎样才能做到这一点?

【问题讨论】:

  • 所以你想水平滚动整个列表视图还是只滚动列表视图中的行??
  • 我想垂直滚动列表,水平滚动包含列表的卡片。我可以这样做,但我不能同时滚动,所以很难取得好的结果
  • 你的意思是,你想要一个对角手势来同时滚动容器和列表视图——比如,向上和向右移动你的手指,让滚动视图同时向右滚动和列表视图向上滚动?跨度>
  • 是的,我在 stackoverflow 上发现了一个关于覆盖 Horizo​​ntalScrollView 和方法 onInterceptTouchEvent 的问题。我可以改善行为,但仍然不是最佳的
  • 滚动不够流畅?这似乎是一项非常占用 CPU 资源的任务,您是否在清单中使用了 hardwareAccelerated 标志?在最新的设备上,滚动小部件有很大的不同,我曾经不得不为 Xoom 实现一个 ui,它在水平滚动视图中有 15 个 ListViews(虽然不需要同时滚动) - 在我弄清楚如何打开之前,它非常慢硬件渲染

标签: android android-listview horizontalscrollview


【解决方案1】:

看看这个,可能会帮助您实现自定义双向滚动布局。

https://github.com/ened/Android-Tiling-ScrollView/blob/master/src/asia/ivity/android/tiledscrollview/TwoDScrollView.java

如果您想要任何 ListView 功能(例如视图回收、过滤、适配器)- 事情会变得更加复杂。

【讨论】:

    【解决方案2】:

    我建议您使用 ViewFlipper 来提供水平滚动效果。然后将 ListView 添加到孩子的脚蹼。使用手势左右移动。

    ListView 仍然会垂直滚动,如果您无法将 OnItemClickListener 设置为 ListView,那么您可以使用 Gesture 的 SingleTap 方法。

    ListView inside View flipper discussion 1ListView inside View Flipper Discussio 2

    【讨论】:

    • 界面会改变,但您可以以某种方式对其进行自定义
    【解决方案3】:

    我建议将您的 horiziontallayout 作为您在适配器的 getView() 中返回的根视图。这样每一行将彼此分开滚动。如果这不能立即起作用,您可能必须为您的行设置 setItemsCanFocus(true) 才能将输入提供给您的水平滚动视图。

    【讨论】:

    • 不,但问题是我不想水平滚动列表视图元素而是卡片,因为它们很多,我想全部查看。所以如果 [ 和 ] 代表屏幕尺寸和 |是卡片/列表视图,这就是我所拥有的:[| | | |]| | | |所以水平滚动是为了看牌。
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 2023-03-25
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多