我通过翻新将图像发送到服务器。发送过程完成后,我的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>
请尝试以下代码:-
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);
}
}