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'
应该是布局问题。不能在scrollView中嵌套scrollView