我正在尝试使用适配器来组成内部视图来实现下图所代表的布局:
所有行都滚动在一起并且已经进行了回收。
我还没有在SO或任何博客上看到过很多方法。 FlowLayout不允许滚动,StaggeredGridView(Etsy或Google)不允许旋转,并且同步多ListView似乎也参与其中。
此自定义组件的SO方法是什么?
答案 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。这将相应地缩放图像而不会拉伸。
然后添加所有水平滚动代码。