android - 在 Picasso.load() 之后更改 recyclerview 中的 ImageView 大小?

标签 android imageview android-recyclerview picasso gridlayoutmanager

我有:

  • 带有 GridLayoutManager 的回收 View
  • Grid item layout with ImageView in it (with height wrap_content and width match_parent) wrapped in a Framelayout, 所以图像是 bottom|center_horizo​​ntal 对齐的
  • Picasso 从网络异步加载图像到 ImageView

现状: 图像加载到 imageView 中,但 imageview 的大小是回收的网格项目的 imageview 的大小。

我想实现的目标: 将图像加载到 ImageView 后,在运行时调整 ImageView 的大小(重绘)。

我尝试过的:

  1. notifyItemChanged() - 可以做到这一点(至少在理论上),但我 我无法检查当前网格项的 View 是否在布局中 状态,所以我的应用程序因 IllegalStateException 而崩溃
  2. 通过回调监听 Picasso 的加载,onSuccess() 检查 imageview 可绘制宽高比并尝试调整 imageview 本身的大小 请求布局()。不工作。 (好吧,它起作用了,但只有当 是动画或触发布局重绘的东西。如果 什么都没有,那么 imageview 就不会重绘。)
  3. 通过回调监听 Picasso 的加载,然后 onSuccess() 启动一个动画,为 ImageView 的 alpha 设置动画。这将触发重绘。但这有时行得通有时行不通(我不知道为什么)。

最佳答案

我所做的是将 ImageView 放入 FrameLayout 中,然后根据需要更改此 FrameLayout 的大小。希望对您有所帮助。

<FrameLayout
        android:id="@+id/frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">

        <ImageView
            android:id="@+id/video_thumbnail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="fitStart"
            android:adjustViewBounds="true" />

</FrameLayout>

附言改变 FrameLayout 的大小:

viewHolder.frame.setMinimumWidth(neededWidth);

关于android - 在 Picasso.load() 之后更改 recyclerview 中的 ImageView 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693241/

相关文章:

Android 如何使用 Imageview 制作边框

java - 如何去除应用栏上方的阴影?

java - Android 应用程序仅播放一次声音

列表项中的 Android ListView ImageView 在滚动时隐藏

android - RecyclerView适配器布局不显示图标

api - 如何在Retrofit2中使用协程?

java - 同时通过 2 个不同的声卡播放 2 首音乐

android - BroadcastReceiver 未触发通知操作点击

android - 在回收 View 应用程序崩溃中同时选择两个项目时,我该如何解决?

android - Recyclerview 反弹动画