Glide-第一次加载ImageView的高度为0dp

问题描述 投票:0回答:1

我通过翻新将图像发送到服务器。发送过程完成后,我的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>
android android-recyclerview android-glide
1个回答
0
投票

请尝试以下代码:-

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);
   }
 }
© www.soinside.com 2019 - 2024. All rights reserved.