android - RecyclerView zeigt Netzwerkbilder an und Fresco lädt sie. Unter der Ziel-SDK-Version 25 sind die Bildpositionen nicht in der richtigen Reihenfolge und mehrere Bilder werden überlagert.
阿神
阿神 2017-05-24 11:38:04
0
1
1328

Verwenden Sie Recyclerview, um eine Reihe von Bildern anzuzeigen. Verwenden Sie Fresco zum Laden.
Damit sich imageView an das Bildseitenverhältnis anpasst, stellt Fresco DraweeController so ein, dass die Größe berechnet wird.

Dieser Code kann normal funktionieren, wenn die Ziel-SDK-Version 17 verwendet wird, und die Bilder können normal angezeigt werden. Beispielsweise werden 5 Bilder nacheinander angezeigt.
Später habe ich die Ziel-SDK-Version 25 festgelegt. Ohne den Code zu ändern, wurden alle 5 Bilder geladen. Allerdings waren die Positionen der 5 Bilder überlagert und es war nur ein Bild zu sehen. Ich bin auf die Ziel-SDK-Version 17 umgestiegen und es hat wieder normal funktioniert. . .

Bitte sagen Sie mir, was los ist. Schließlich ist Android O out. . . .

Layout-Datei

 
<?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>

Der von RecyclerView.Adapter in onBindViewHolder aufgerufene Schlüsselcode. data ist eine Bean, getImage ruft die Bild-URL ab

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

Frescos Code

/***
 * 根据图片大小,更新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);
}



Paketangebot

 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'
阿神
阿神

闭关修行中......

Antworte allen(1)
曾经蜡笔没有小新

应该是布局问题。不能在scrollView中嵌套scrollView

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage