Android 滑动返回图像的先前大小

Android 滑动返回图像的先前大小,android,android-recyclerview,android-glide,Android,Android Recyclerview,Android Glide,我的问题是在网格视图中在列表和网格布局管理器之间切换。该项仅包含一个图像视图 <layout> <data> <variable name="photoUrl" type="String"/> </data> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sch

我的问题是在网格视图中在
列表
网格
布局管理器之间切换。该项仅包含一个
图像视图

<layout>
<data>
    <variable
        name="photoUrl"
        type="String"/>
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:id="@+id/frameRootPhotos"
    android:layout_height="wrap_content">

    <com.talkinginvite.widgets.SquareImageView
        android:layout_width="match_parent"
        app:squareImage="@{photoUrl}"
        android:scaleType="fitXY"
        android:src="@drawable/placeholder_list"
        android:layout_margin="@dimen/_6sdp"
        app:placeholder="@{@drawable/placeholder_list}"
        android:layout_height="wrap_content" />
</LinearLayout>
我的问题是在切换期间,有时
ListView
会以网格视图项的大小显示图像。正如您所看到的,我的列表项是一个正方形图像,网格包含3列。 我还认为,在变换过程中,Glide有时会使用旧图像,而不是合成图像进行二次变换,其显示模糊和角半径是原来的两倍

下面是我如何切换的

 private void switchLayoutManager(){
    if(isListView){
        LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
        binding.rvPhotos.setLayoutManager(layoutManager);
    }else{
        GridLayoutManager layoutManager=new GridLayoutManager(getActivity(),3);
        binding.rvPhotos.setLayoutManager(layoutManager);
    }
}
我的方法有问题吗?我怎样才能避免这种行为滑翔。这也是切换layoutManager的正确方法吗?或者我应该使用两个
回收视图


注意:-我还需要维护缓存,这是最基本的要求。所以我不能跳过
Glide
的缓存

每次都很好地设置新的适配器似乎很有效。如果再次遇到此问题,将返回。但每次设置新适配器对我来说都是开销。有什么优雅的方法可以做到这一点吗?试试看签名如何在我的情况下完全有帮助?你能用我上面的代码提供一个例子吗?我无法使用
DiskCacheStrategy。无
我需要缓存。请尝试此
view.layout(0,0,0,0);使用(视图)、加载(url)、应用(请求选项)、导入(视图)
 private void switchLayoutManager(){
    if(isListView){
        LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
        binding.rvPhotos.setLayoutManager(layoutManager);
    }else{
        GridLayoutManager layoutManager=new GridLayoutManager(getActivity(),3);
        binding.rvPhotos.setLayoutManager(layoutManager);
    }
}