我想制作一个像UI
这样的GridView
元素,我希望它具有完整的功能,但希望它可以水平滚动而不是垂直滚动。
通过水平滚动我的意思是它应该以这种方式构建而不是放在HorizontalScrollView
。
根据{{中的项目数量,我的Custom GridView
将有rows
固定数量4-5
而columns
应为extensible
1}}。您可以将其视为本机Adapter
所做的相反,但它应该保持功能。
我查看了Google如何实现GridView
的源代码,但我能够非常了解并开始从头开始使GridView
似乎不是好主意,因为我担心我无法像谷歌那样对记忆优化做出正确的判断。
我观察到View
扩展了GridView
,所以我的问题是,是AbsListView
让AbsListView
垂直滚动并从适配器添加项目,或者是它GridView
增加了垂直滚动能力?我应该调整GridView
还是GridView
?
知道是否已经做了我想做的事情会更好吗?
这已在Android Honeycomb 3.1及更高版本的原生图库和YouTube应用中实施。所以,如果有人有想法,请详细说明。
Honeycomb Gallery app的快照:
Honeycomb YouTube应用的快照:
答案 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.
}
}