android - RecyclerView affiche les images réseau et Fresco les charge. Sous la version 25 du SDK cible, les positions des images sont dans le désordre et plusieurs images sont superposées.
阿神
阿神 2017-05-24 11:38:04
0
1
1361

Utilisez Recyclerview pour afficher une série d'images. Utilisez la fresque pour charger.
Afin d'adapter imageView au rapport hauteur/largeur de l'image, fresco configure DraweeController pour calculer la taille.

Ce code peut fonctionner normalement lorsque la version 17 du Sdk cible est utilisée et les images peuvent être affichées normalement. Par exemple, 5 images sont affichées une par une dans l'ordre.
Plus tard, j'ai défini la version 25 du SDK cible. Sans changer le code, les 5 images ont été chargées. Cependant, les positions des 5 images étaient superposées et une seule image pouvait être vue. J'ai changé pour cibler la version 17 du SDK et cela a de nouveau fonctionné normalement. . .

S'il vous plaît, dites-moi ce qui se passe. Après tout, Android O est sorti. . . .

Fichier de mise en page

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/activity_circle_details"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
>
<TextView
    android:id="@+id/test_item_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:textSize="17sp"
    android:layout_margin="5dp"
    android:lineSpacingMultiplier="1.5"
    android:textColor="@color/black"
    />
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/test_item_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="1dp"
    android:layout_marginRight="1dp"
    android:layout_marginBottom="5dp"
    fresco:placeholderImage="@mipmap/img_empty"
    fresco:placeholderImageScaleType="fitCenter"
    fresco:failureImage="@mipmap/img_error"
    />
</LinearLayout>

Le code clé appelé par RecyclerView.Adapter dans onBindViewHolder. les données sont un bean, getImage obtient l'URL de l'image

if(data.getImage()!=null && data.getImage().length()>0) {
            imageView.setVisibility(View.VISIBLE);
            //imageView.setImageURI(data.getImage());
          setControllerListener(imageView, data.getImage(),Tools.getScreenWidth(CircleDetailsActivity.this));

Le code de la fresque

/***
 * 根据图片大小,更新view的大小自适应图片,按宽高比缩放
 * 不知道为什么。targetVersion必须为4.2. 如果我设置为7.1则会发生图像覆盖的现象只能看到最后一张图
 * @param simpleDraweeView
 * @param imagePath
 * @param imageWidth
 */
public static void setControllerListener(final SimpleDraweeView simpleDraweeView, String imagePath, final int imageWidth) {
    final ViewGroup.LayoutParams layoutParams = simpleDraweeView.getLayoutParams();
    ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
        @Override
        public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) {
            if (imageInfo == null) {
                return;
            }
            int height = imageInfo.getHeight();
            int width = imageInfo.getWidth();
            layoutParams.width = imageWidth;
            layoutParams.height = (int) ((float) (imageWidth * height) / (float) width);
            simpleDraweeView.setLayoutParams(layoutParams);
        }

        @Override
        public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
            Log.d("TAG", "Intermediate image received");
        }

        @Override
        public void onFailure(String id, Throwable throwable) {
            throwable.printStackTrace();
        }
    };
   
    DraweeController controller = Fresco.newDraweeControllerBuilder().setControllerListener(controllerListener).setTapToRetryEnabled(true).setUri(Uri.parse(imagePath)).build();

    simpleDraweeView.setController(controller);
}



Devis de forfait

 compile 'com.android.support:appcompat-v7:25.3.1'
 compile 'com.facebook.fresco:fresco:0.13.0'
 compile 'com.squareup.okhttp3:okhttp:3.7.0'
 compile 'com.facebook.fresco:animated-gif:0.13.0'
 compile 'com.facebook.fresco:imagepipeline-okhttp3:0.13.0+'
 compile 'com.android.support:recyclerview-v7:25.3.1'
 compile 'com.android.support:percent:25.3.1'
 compile 'com.android.support:design:25.3.1'
 compile 'com.android.support:support-v4:25.3.1'
阿神
阿神

闭关修行中......

répondre à tous(1)
曾经蜡笔没有小新

Cela devrait être un problème de mise en page. Impossible d'imbriquer scrollView dans scrollView

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal