Gunakan Recyclerview untuk memaparkan satu siri gambar. Gunakan lukisan dinding untuk memuatkan.
Untuk menjadikan imageView menyesuaikan diri dengan nisbah bidang imej, fresco menetapkan DraweeController untuk mengira saiz.
Kod ini boleh berfungsi seperti biasa apabila sasaran Sdk versi 17 digunakan, dan imej boleh dipaparkan secara normal. Contohnya, 5 gambar dipaparkan satu persatu mengikut urutan.
Kemudian saya tetapkan target sdk versi 25. Tanpa menukar kod, kesemua 5 gambar tersebut telah dimuatkan Namun kedudukan 5 gambar tersebut telah ditindih dan hanya dapat dilihat satu gambar. Saya menukar kepada sasaran sdk versi 17 dan ia berfungsi seperti biasa semula. . .
Sila beritahu saya apa yang sedang berlaku. Lagipun, android O sudah keluar. . . .
Fail susun atur
<?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>
Kod kunci yang dipanggil oleh RecyclerView.Adapter dalam onBindViewHolder. data adalah kacang, getImage mendapat url imej
if(data.getImage()!=null && data.getImage().length()>0) {
imageView.setVisibility(View.VISIBLE);
//imageView.setImageURI(data.getImage());
setControllerListener(imageView, data.getImage(),Tools.getScreenWidth(CircleDetailsActivity.this));
Kod fresco
/***
* 根据图片大小,更新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);
}
Sebut Harga Pakej
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'
Ia sepatutnya menjadi masalah susun atur. Tidak boleh bersarang scrollView dalam scrollView