如何制作一个水平和垂直滚动的二维图库?

发布于 2024-09-24 04:47:58 字数 221 浏览 3 评论 0原文

我是 Android 新手,我想制作一个图像库,其中每一列都是一个类别,用户可以垂直和水平滚动。

我发现了一篇关于如何显示图像列表的有用帖子 在这里。我想知道是否可以在图库视图中嵌套图像列表?

I'm new to Android and I want to make an image gallery where each column is a category, and users can scroll both vertically and horizontally.

I found a useful post about how to display list of images here. I'm wondering if it's possible to nest lists of image inside of a gallery view?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

年华零落成诗 2024-10-01 04:47:58

将图库放入 GridView 中,其中一列和列大小设置为填充父视图(或达到此效果的其他内容)。将画廊放入 GridView 中,并在 LayoutParams 中将其高度设置为您想要占用的可绘制对象/视图的高度。您需要做的就是当移动一个画廊时,即可移动网格视图中的所有其他画廊。我将在下面发布代码。注意:我所做的代码是对有效概念的测试,我只是在手机上尝试过。然而,它并不浮华。当我继续研究它时,我可能会更新代码以使其看起来更好。

~Aedon :)

public class Test extends Activity {
    /** Called when the activity is first created. */
    GridView gv;
    Gallery g[] = new Gallery[3];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gv = (GridView) findViewById(R.id.gridview);
        gv.setAdapter(new GAdapter());
        for (int i = 0; i < g.length; i++) {
            g[i] = new Gallery(this);
            g[i].setAdapter(new GGAdapter());
            g[i].setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View arg0, MotionEvent ev) {
                    if (ev.getAction() == MotionEvent.ACTION_UP) {
                        for (int j = 0; j < g.length; j++) {
                            g[j].setSelection(((AdapterView) arg0)
                                    .getSelectedItemPosition());
                        }
                    }
                    return false;
                }
            });
        }
    }

    private class GAdapter extends BaseAdapter {
        public GAdapter() {
        }

        @Override
        public int getCount() {
            return g.length;
        }

        @Override
        public Object getItem(int pos) {
            return pos;
        }

        @Override
        public long getItemId(int pos) {
            return pos;
        }

        @Override
        public View getView(final int pos, View convertView, ViewGroup parent) {

            g[pos].setLayoutParams(new GridView.LayoutParams(gv.getWidth(), gv
                    .getHeight()));
            return g[pos];
        }
    }

    private class GGAdapter extends BaseAdapter {
        int[] images = new int[] { R.drawable.icon, R.drawable.icon,
                R.drawable.icon };

        public GGAdapter() {
        }

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object getItem(int pos) {
            return pos;
        }

        @Override
        public long getItemId(int pos) {
            return pos;
        }

        @Override
        public View getView(final int pos, View convertView, ViewGroup parent) {
            ImageView mIV = new ImageView(Test.this);
            mIV.setBackgroundResource(images[pos]);
            mIV.setLayoutParams(new Gallery.LayoutParams(gv.getWidth(), gv
                    .getHeight() / 3));
            return mIV;
        }
    }
}

和我的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="1"
        android:verticalSpacing="10dp" />

</LinearLayout>

Place a gallery into a GridView with one column and column size set to fill the parent view (or something to that effect). Place a gallery into the GridView and set its height in LayoutParams to the height of the drawables/views you want to occupy them. All you need to do then is when one gallery is moved to move all the others in the grid view. I'll post the code below. Note: the code I did is a test of concept that works, I just tried it on my phone. As such however, it is not flashy. As I continue to work on It I may update the code to make it look nicer.

~Aedon :)

public class Test extends Activity {
    /** Called when the activity is first created. */
    GridView gv;
    Gallery g[] = new Gallery[3];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gv = (GridView) findViewById(R.id.gridview);
        gv.setAdapter(new GAdapter());
        for (int i = 0; i < g.length; i++) {
            g[i] = new Gallery(this);
            g[i].setAdapter(new GGAdapter());
            g[i].setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View arg0, MotionEvent ev) {
                    if (ev.getAction() == MotionEvent.ACTION_UP) {
                        for (int j = 0; j < g.length; j++) {
                            g[j].setSelection(((AdapterView) arg0)
                                    .getSelectedItemPosition());
                        }
                    }
                    return false;
                }
            });
        }
    }

    private class GAdapter extends BaseAdapter {
        public GAdapter() {
        }

        @Override
        public int getCount() {
            return g.length;
        }

        @Override
        public Object getItem(int pos) {
            return pos;
        }

        @Override
        public long getItemId(int pos) {
            return pos;
        }

        @Override
        public View getView(final int pos, View convertView, ViewGroup parent) {

            g[pos].setLayoutParams(new GridView.LayoutParams(gv.getWidth(), gv
                    .getHeight()));
            return g[pos];
        }
    }

    private class GGAdapter extends BaseAdapter {
        int[] images = new int[] { R.drawable.icon, R.drawable.icon,
                R.drawable.icon };

        public GGAdapter() {
        }

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object getItem(int pos) {
            return pos;
        }

        @Override
        public long getItemId(int pos) {
            return pos;
        }

        @Override
        public View getView(final int pos, View convertView, ViewGroup parent) {
            ImageView mIV = new ImageView(Test.this);
            mIV.setBackgroundResource(images[pos]);
            mIV.setLayoutParams(new Gallery.LayoutParams(gv.getWidth(), gv
                    .getHeight() / 3));
            return mIV;
        }
    }
}

and my xml file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="1"
        android:verticalSpacing="10dp" />

</LinearLayout>
冬天旳寂寞 2024-10-01 04:47:58

您可能需要一个 GridView

GridView 是一个 ViewGroup,它在二维、可滚动的网格中显示项目。网格项会使用 ListAdapter 自动插入到布局中。

You may need a GridView.

GridView is a ViewGroup that displays items in a two-dimensional, scrollable grid. The grid items are automatically inserted to the layout using a ListAdapter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文