在StaggeredGridLayout中自动缩放imageview的高度

时间:2015-12-12 16:07:36

标签: android imageview android-recyclerview staggeredgridlayout

我有一个包含ImageView的recyclerview。但每张图像的底部都有额外的空间。您可以在屏幕截图中看到额外的空间是红色背景。我希望所有图像能够并排。

enter image description here

以下是我的Activity中定义布局管理器的代码

fun setupRecyclerView(recyclerView: RecyclerView) {
    val adapter = PictureAdapter()
    recyclerView.adapter = adapter
    recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
}

这是我在recyclerview中的项目的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools">

    <data>
        <variable
        name="viewModel"
        type="com.my.app.viewModel.PictureViewModel" />
    </data>

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="280dp"
        app:imageUrl="@{viewModel.imageUrl}"
        android:background="#ff0000"
        android:adjustViewBounds="true"
        android:scaleType="fitStart" />
</layout>

我正在用这个

加载图片
@BindingAdapter({"bind:imageUrl"})
public static void loadImage(final ImageView view, String imageUrl) {
    Picasso.with(view.getContext())
    .load(imageUrl)
    .into(view);
}

如何自动调整ImageView的高度以消除额外的间距?我不想裁剪我的形象。如果我将wrap_content放在ImageView的layout_height中,那么应用程序变慢,滚动不顺畅,而且我得到了很多

  

应用程序可能在其主线程上做了太多工作。

2 个答案:

答案 0 :(得分:0)

具有固定layout_height的ScaleType fitStart可能导致adjustviewbound被忽略。尝试使用不同的scaleType而不是fixtStart或fixEnd。

答案 1 :(得分:-1)

您必须使用交错网格视图而不是简单的Gridview。并且代替imageview,您必须使用DynamicHeightImageview。这将自动调整图像高度并像Pinterest应用程序一样接一个地放置图像。它完全解决了你的问题。感谢