我有:
>使用GridLayoutManager的recyclerview
>包含ImageView的网格项目布局(高度wrap_content和宽度match_parent)包装在Framelayout中,因此图像在水平方向上对齐| bottom | center_horizontal
>毕加索从网络上将图像异步加载到ImageView中
现在的情况:
图像已加载到imageView中,但是imageview的大小是回收的网格项目的imageview的大小.
我想实现的目标:
将图像加载到imageview后,在运行时调整imageview的大小(重新绘制).
我试过的
> notifyItemChanged()-可以做到(至少在理论上),但是我
无法检查当前网格项目的视图是否在布局中
状态,因此我的应用因IllegalStateException崩溃了
>使用回调监听毕加索的负载,然后onSuccess()检查imageview可绘制的长宽比,并尝试使用
requestLayout().不工作. (很好,但只有在
是动画或触发布局重新绘制的内容.如果
一无所有,则不会重新绘制imageview.)
>通过回调监听毕加索的负载,然后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);