Glide - высота ImageView равна 0dp для первой загрузки - PullRequest
1 голос
/ 29 мая 2020

Я отправляю изображения на сервер через Retrofit. Когда процесс отправки завершен, открывается мой FeedFragment, и последнее отправленное изображение должно отображаться в верхней части RecyclerView (первая позиция). Но при первой загрузке imageView не отображается. Только если я прокручу вниз и вверх, он станет видимым. Код скольжения (в адаптере RecyclerView):

                           Glide.with(context)
                            .asBitmap()
                            .load(ApiClient.Base_URL + imagesList.get(0).getImage())
                            .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
                            .dontAnimate()
                            .dontTransform()
                            .thumbnail(0.1f)
                            .into(new CustomTarget<Bitmap>() {
                                @Override
                                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {

                                    progressBar.setVisibility(View.GONE);
                                    //for dynamic image height:
                                    targetImageHeight = (resource.getHeight() * deviceHeight) / resource.getWidth();

                                    if (targetImageHeight >= deviceHeight) {
                                        targetImageHeight = deviceHeight;
                                    }
                                    imageView.getLayoutParams().height = targetImageHeight;
                                    imageView.setImageBitmap(resource);
                                }

                                @Override
                                public void onLoadCleared(@Nullable Drawable placeholder) {

                                    Glide.with(context).clear(imageView);
                                    progressBar.setVisibility(View.GONE);
                                }
                            });

xml:

 <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:visibility="gone" />

            <uk.co.senab.photoview.PhotoView
                android:id="@+id/imageView"
                android:layout_width="match_parent"
                android:layout_height="400dp" />

        </RelativeLayout>

1 Ответ

0 голосов
/ 29 мая 2020

Пожалуйста, попробуйте следующий код: -

void load(final ImageView imageView) {
if (imageView.getHeight() == 0) {
    imageView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
        @Override public boolean onPreDraw() {
            imageView.getViewTreeObserver().removeOnPreDrawListener(this);
            load(imageView);
            return true; // == allow drawing
        }
    });
} else {
    Glide
            .with(imageView.getContext())
            .load("whatever")
            .fitCenter()
            .override(Target.SIZE_ORIGINAL, imageView.getHeight())
            .into(imageView);
   }
 }
...