cari

Rumah  >  Soal Jawab  >  teks badan

android - RecyclerView memaparkan imej rangkaian dan Fresco memuatkannya Di bawah sasaran sdk versi 25, kedudukan imej tidak teratur dan berbilang imej ditindih.

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'
阿神阿神2745 hari yang lalu1335

membalas semua(1)saya akan balas

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-24 11:40:04

    Ia sepatutnya menjadi masalah susun atur. Tidak boleh bersarang scrollView dalam scrollView

    balas
    0
  • Batalbalas