我有:
- 带有 GridLayoutManager 的回收 View
- Grid item layout with ImageView in it (with height wrap_content and width match_parent) wrapped in a Framelayout, 所以图像是 bottom|center_horizontal 对齐的
- Picasso 从网络异步加载图像到 ImageView
现状: 图像加载到 imageView 中,但 imageview 的大小是回收的网格项目的 imageview 的大小。
我想实现的目标: 将图像加载到 ImageView 后,在运行时调整 ImageView 的大小(重绘)。
我尝试过的:
- notifyItemChanged() - 可以做到这一点(至少在理论上),但我 我无法检查当前网格项的 View 是否在布局中 状态,所以我的应用程序因 IllegalStateException 而崩溃
- 通过回调监听 Picasso 的加载,onSuccess() 检查 imageview 可绘制宽高比并尝试调整 imageview 本身的大小 请求布局()。不工作。 (好吧,它起作用了,但只有当 是动画或触发布局重绘的东西。如果 什么都没有,那么 imageview 就不会重绘。)
- 通过回调监听 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/