【问题标题】:Change the behaviour of a GridView to make it scroll horizontally rather than vertically更改 GridView 的行为以使其水平滚动而不是垂直滚动
【发布时间】:2012-07-20 10:02:30
【问题描述】:

我想制作一个类似于GridView 的UI 元素,我希望它具有完整的功能,但希望它可以水平滚动而不是垂直滚动。

我所说的水平滚动是指它应该以这种方式构建,而不是放入HorizontalScrollView。

我的Custom GridView 将有固定数量的rows 说4-5 和columns 应该是extensible 基于Adapter 中的项目数。您可以将其视为与原生 GridView 所做的相反,但它应该保持功能。

我查看了 Google 如何实现 GridView 的源代码,但我能理解的很少,从头开始制作 View 似乎不是一个好主意,因为恐怕我无法像谷歌那样公正地对待内存优化。

我观察到GridView 扩展了AbsListView,所以我的问题是,是AbsListView 让GridView 垂直滚动并从适配器添加项目,还是GridView 添加垂直滚动能力?我应该调整GridView 还是AbsListView?

如果有什么东西已经在做我想做的事情,那就更好了?

这已经在 Android Honeycomb 3.1 及更高版本的原生 Gallery 和 YouTube 应用中实现。所以如果有人有想法,请详细说明。

Honeycomb Gallery 应用快照:

Honeycomb YouTube 应用截图:

【问题讨论】:

  • @Abhilasha 谢谢,但它与我想要做的完全无关。
  • 你检查过 GalleryView 吗?
  • GalleryView 只有一行,我想要多行,类似于水平滚动的网格。
  • 我猜你必须从头开始创建一个。我在 J2ME 中开发了相同的小部件。您需要使用Canvas。如果您从头开始,请告诉我。我可以提供一些想法。而且不要忘记这绝对是耗时的。

标签: android android-listview android-view android-custom-view android-gridview


【解决方案1】:

API 11 中有 setRotation。您必须将 gridview 旋转 90 度,将子视图旋转 -90 度。

文档:http://developer.android.com/reference/android/view/View.html#setRotation(float)

更新:

按照 API 在视图上获得 3d 效果会很有用

setCameraDistance(float) - 设置z轴距离(深度)

setRotationX(float) - 设置水平轴角度

setRotationY(float) - 设置垂直轴角度

将相机距离设置为屏幕高度的一半。然后根据视图在屏幕上的位置设置rotationX。从左到右的旋转角度应该类似于 (20, 10, 0, -10, -20)。稍后您可以使用旋转Y 角度来获得一些高度感知。

在扩展 GridView 的覆盖 layout 方法中进行所有设置。

@override
void layout(int t, int l, int r, int b) {
    super.layout(t, l, r, b);
    ...
    int columnStart = getFirstVisiblePosition()/no_of_columns;
    int columnEnd = getLastVisiblePosition()/no_of_columns;

    loop from 'columnStart' to 'columnEnd' 'no_of_colmns' times {
        // set the camera distance and rotationX to views
        // depending on the position of a view on screen.
    }
}

【讨论】:

  • 将GridView旋转90度,我想在z轴上压下这个角度,我的意思是它应该感觉像是被打孔了,更像是一个圆柱视图。
  • 提供 3d 外观并不容易。您必须编写自定义 ViewGroup。
  • 如何让它水平滚动?
  • 它还在垂直滚动吗?你可以粘贴结果快照吗?
  • 能否请您简要回答一下,我无法理解,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多