Change the behaviour of a GridView to make it scroll horizontally rather than vertically
Asked Answered
R

1

5

I want to make a UI element like a GridView, I want it's complete functionality but want it to be horizontally scrollable rather than vertically.

By horizontal scroll I mean it should be built that way and not put in a HorizontalScrollView.

My would be Custom GridView will have fixed number of rows say 4-5 and the columns should be extensible based on number of items in the Adapter. You can think of it as the opposite of what the native GridView does, yet it should maintain the functionality.

I have looked at the source code of how a GridView is implemented by Google, but I am able to understand very less and starting to make the View from scratch doesn't seem to be a good idea, since I am afraid I will not be able to do justice to memory optimization's the way Google did it.

I had observed that GridView extends AbsListView, so my question is, is it AbsListView which lets a GridView scroll vertically and add items from the adapter, or is it GridView which adds the vertical scrolling ability? Should I tweak GridView or AbsListView?

It would be even better to know if there's something which already does what I want to do?

This has already been implemented in native Gallery and YouTube app of Android Honeycomb 3.1 and above. So if anyone has an idea, please elaborate.

Snapshot of Honeycomb Gallery app:

enter image description here

Snapshot of Honeycomb YouTube app:

enter image description here

Rambunctious answered 20/7, 2012 at 10:2 Comment(6)
Try this link https://mcmap.net/q/36362/-scrollview-vertical-and-horizontal-in-android/840520Surrender
@Surrender Thanks, but its not at all related to what I want to do.Rambunctious
Have You checked GalleryView?Belford
GalleryView has just one row, I want multiple rows, something like a horizontally scrolling grid.Rambunctious
I guess you have to create one from scratch. I developed same widget in J2ME.You need to use Canvas. If you start from scratch let me know. I can help with some ideas. And not to forget it is definitely time consuming.Surrender
There is setRotation in API 11 - developer.android.com/reference/android/view/… . You'll have to rotate the images too..Bribe
B
11

There is setRotation in API 11. You'll have to rotate the gridview by 90 degrees and child views by -90 degrees.

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

Update:

To get a 3d effect on views following APIs would be useful

setCameraDistance(float) - set the z axis distance(depth)

setRotationX(float) - set the horizontal axis angle

setRotationY(float) - set the vertical axis angle

Set the camera distance to half of the screen height. Then set the rotationX based on the view's location on screen. The rotation angles should be something like (20, 10, 0, -10, -20) from left to right. Later you can play with rotationY angles to get some height perception.

Do all setting in extended GridView's overriden layout method.

@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.
    }
}
Bribe answered 23/7, 2012 at 10:45 Comment(6)
that rotates the GridView by 90 degrees, I want the angle to be depressed in z axis, I mean it should feel like it has been punched, more like a cylindrical view.Rambunctious
Giving a 3d look is not so easy.. You will have to write a custom ViewGroup.Bribe
how can I make it scroll horizontally?Rambunctious
Its still scrolling vertically? can you paste the result snapshot?Bribe
Can you please brief your answer a bit, I am unable to understand it,Rambunctious
While this should work in theory, it's not really usable in practice. It's very much possible to rotate the GridView, but the height and width remains the same. This means that some of the GridView will be cut off.Pimp

© 2022 - 2024 — McMap. All rights reserved.