更改GridView的行为以使其水平滚动而不是垂直滚动

时间:2012-07-20 10:02:31

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

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

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

根据{{中的项目数量,我的Custom GridView将有rows固定数量4-5columns应为extensible 1}}。您可以将其视为本机Adapter所做的相反,但它应该保持功能。

我查看了Google如何实现GridView的源代码,但我能够非常了解并开始从头开始使GridView似乎不是好主意,因为我担心我无法像谷歌那样对记忆优化做出正确的判断。

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

知道是否已经做了我想做的事情会更好吗?

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

Honeycomb Gallery app的快照:

enter image description here

Honeycomb YouTube应用的快照:

enter image description here

1 个答案:

答案 0 :(得分:11)

API 11中有setRotation。您必须将网格视图旋转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)。之后你可以使用旋转角度来获得一些高度感知。

扩展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.
    }
}