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

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

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

水平滚动是指它应该以这种方式构建,而不是放在 Horizo​​ntalScrollView 中。

我会是 Custom GridView 将有固定数量的 rows4-5columns 应该根据适配器中的项数可扩展。您可以认为它与原生 GridView 的功能相反,但它应该保持功能。

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

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

如果知道是否有某些东西已经在做我想做的事,那就更好了?

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

Honeycomb Gallery 应用快照:

enter image description here

Honeycomb YouTube 应用快照:

enter image description here

最佳答案

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

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

更新:

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

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

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

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

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

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

关于android - 更改 GridView 的行为以使其水平滚动而不是垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577153/

相关文章:

android - forceLayout()、requestLayout() 和 invalidate() 的使用

android - 裁剪 Canvas 后如何从 ImageView 中删除承受空间?

android - 使用 ADB 启用 MTP

android - ListView 不刷新已经可见的项目

android - ListView 上的空文本过滤器

android - 如何更改特定 ListView 的项目或元素的颜色

android - 在自定义 View onDraw 中使用硬件层

PHP Laravel RESTful api for android 问题

安卓应用 : Old database still exists after switching to room database

java - 在 ListView 中使用复选框和 onListItemClick