【问题标题】:Android: How to create a Facebook like images gallery grid?Android:如何创建类似 Facebook 的图片库网格?
【发布时间】:2016-03-28 12:27:37
【问题描述】:

我正在尝试实现类似 facebook 的画廊网格,其中项目具有不同的大小:

我尝试使用不同的库/解决方案,但目前没有成功:

  1. 我尝试使用AsymemetricGridView。 但是这个实现的问题是,在扔掉适配器之后,网格中还有空的死角。

  2. 我也想过使用 StaggeredGridLayoutManagerRecycleView,但在这种情况下,项目的大小与 Facebook 库中实施的其他项目的大小不同。

现在我想在适配器中为不同的情况提供不同的视图持有者,但我真的不喜欢这个想法。有什么更好的方法来完成这项任务?

【问题讨论】:

    标签: android gridview image-gallery staggered-gridview staggeredgridlayout


    【解决方案1】:

    最后,我决定使用TwoWayView 库。

    你可以从:https://github.com/lucasr/twoway-view

    在我的代码中,我做了以下主要更改:

    在xml布局中添加了TwoWayView:

     <org.lucasr.twowayview.widget.TwoWayView
                android:id="@+id/twvGrid"
                android:background="@android:color/white"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                style="@style/TwoWayView"
                app:twowayview_layoutManager="SpannableGridLayoutManager"
                app:twowayview_numColumns="3"
                app:twowayview_numRows="3" />
    

    在代码中我做了以下更改:

    private TwoWayView mTwvGrid;
    .........
    
     mTwvGrid = (TwoWayView) findViewById(R.id.twvGrid);
        final Drawable divider = getResources().getDrawable(R.drawable.divider);
        mTwvGrid.addItemDecoration(new DividerItemDecoration(divider));
    
    
        mTwvGrid.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                RequestManager glideRequestManager = Glide.with(TimelineStoryActivity.this);
                if (newState == RecyclerView.SCROLL_STATE_IDLE || newState == RecyclerView.SCROLL_STATE_SETTLING) {
                    glideRequestManager.resumeRequests();
                } else {
                    glideRequestManager.pauseRequests();
                }
            }
    
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {}
        });
    .......
    
    if (mAdapter == null) {
                mAdapter = new TimelineStoryRecycleAdapter(this, mStory, mTwvGrid, this);
                mTwvGrid.setAdapter(mAdapter);
            } else {
                mAdapter.setStory(mStory);
            }
    

    这是最终结果:

    【讨论】:

    • @Emil Adz 可以发布你的 TimelineStoryRecycleAdapter 的代码吗,这个视图需要一个 ListAdapter,并且在当前的 android listadpter 是一个接口,所以请帮助如何设计和应用适配器
    • @Ak9637,对不起,我不能,因为我已经没有这个课程了。
    • 好的,如果可能的话,你能解释一下吗:这个视图需要一个 ListAdapter ,并且在当前的 android listadpter 是一个接口,所以请帮助如何设计和应用适配器
    • twoway-view 比 AsymemetricGridView 实现起来更加简单和快捷。
    • 这个库现在不工作了。还有其他解决方案吗?
    【解决方案2】:

    您可以将 recyclerview 与 StaggeredGridLayoutManager 一起使用来完成此操作。 StaggeredGridLAyoutManager 已经处理了这个问题,你也可以使用 setFullSpan 让图像使用整行

    【讨论】:

    • 如果您查看我的问题中的第 2 部分,您会知道我尝试了此选项,但网格中项目的高度存在问题。我需要高度相同的两倍大小。
    • 你需要谁的高度,你可以很容易地给 imageview 一个固定的高度来实现这个,我已经看到你的第二点了
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2012-06-13
    • 2013-07-27
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多