具有不均匀列大小的动态适配器视图或水平StaggeredGridView

时间:2014-04-07 10:40:38

标签: android android-ui

我正在尝试使用适配器来组成内部视图来实现下图所代表的布局:

Horizontal Staggered Grid

所有行都滚动在一起并且已经进行了回收。

我还没有在SO或任何博客上看到过很多方法。 FlowLayout不允许滚动,StaggeredGridView(Etsy或Google)不允许旋转,并且同步多ListView似乎也参与其中。

此自定义组件的SO方法是什么?

4 个答案:

答案 0 :(得分:4)

我的方法是将n horizontal listviews绑定在一个视图组中。聆听视图组上的触摸事件,并将所有3个水平列表视图一起滚动。

布局就像这样 -

LinearLayout(vertical)
--HorizontalListView1
--HorizontalListView2
--HorizontalListView3

--HorizontalListView-n

现在将所有触摸事件转发到父视图组,并在单个toucheventlistener中处理它们。在touchevent侦听器中,计算所有水平列表视图的滚动,并调用相应的滚动。

由于所有滚动调用都是在UI线程上的单个调用中完成的,因此应在下一个绘图过程中处理它们。这应该让它感觉同步。如果这不起作用,则需要通过扩展它们来显式同步视图。

通过这种方式,您可以使用水平列表视图尽可能地重复使用和回收视图。如果同步到位,所有视图应滚动在一起。

答案 1 :(得分:1)

只是一个想法 - 在内部使用简单的HorizontalScrollView和一个LinearLayout(HSV只需要一个孩子)。在LinearLayout内部垂直另外3个LinearLayouts - 每行一个。在3个布局中的每个布局中(水平)放置属于一行的项目。我没有试过这个,但如果我在你的情况下,这将是我尝试的第一件事。

类似的东西:

<HorizontalScrollView>
    <LinearLayout android:orientation="vertical">
        <LinearLayout android:orientation="horizontal" />
        <LinearLayout android:orientation="horizontal" />
        <LinearLayout android:orientation="horizontal" />
    </LinearLayout>
</HorizontalScrollView>

答案 2 :(得分:1)

我认为最好的方法是扩展ViewGroup并自己实现此组件。还可以扩展BaseAdapter并创建像gerFirstRowView,getSecondRowView等方法。您将能够实现有效的视图回收并避免重度嵌套视图,以便您的组件具有良好的性能。

答案 3 :(得分:0)

使用方向为垂直的GridLayout,高度为3行ImageView的常量值。缩放每个ImageView以匹配adpater中的常量高度。将图像设置为XML中的android:src或Java中的setImageResource。这将相应地缩放图像而不会拉伸。

然后添加所有水平滚动代码。