5

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

通过水平滚动,我的意思是它应该以这种方式构建,而不是放在HorizontalScrollView.

Custom GridView将有固定数量的rows发言权4-5,并且columns应该extensible基于Adapter. 您可以将其视为与本机GridView所做的相反,但它应该保持功能。

我看过GridView谷歌如何实现a的源代码,但我能理解的很少,View从头开始似乎不是一个好主意,因为我怕我无法做到以 Google 的方式公平对待内存优化。

我观察到GridViewextends AbsListView,所以我的问题是,它AbsListView是允许GridView垂直滚动并从适配器添加项目,还是GridView增加垂直滚动能力?我应该调整GridView还是AbsListView

知道是否有一些东西已经做了我想做的事情会更好吗?

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

Honeycomb Gallery 应用程序的快照:

在此处输入图像描述

Honeycomb YouTube 应用程序的快照:

在此处输入图像描述

4

1 回答 1

11

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

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

更新:

要在视图上获得 3d 效果,遵循 API 会很有用

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

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

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

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

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.
    }
}
于 2012-07-23T10:45:20.127 回答