グリッドビューを使用しています。グリッドでは、各アイテムには、最初の場所に新しいアイテムを追加し、その時に最初と最後のアイテムが同じイメージを持つことをアダプタに通知するときに、simpleedraweeviewが含まれます。 (それだけロリポップの下で起こる)Fresco:グリッドビューに間違った画像を表示
XML SimpleDraweeView:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/id_imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center|center_horizontal|center_vertical"
android:adjustViewBounds="true"
android:contentDescription="@string/COM_NOTEBOOK_NOTEBOOK"
android:scaleType="centerInside"
app:imageUrl="@{url}" />
イメージローディングコード:
public void justLoadImage(final String mPath, final SimpleDraweeView mImageView, int width, int height) {
try {
if (TextUtils.isEmpty(mPath) || mImageView == null) {
return;
}
if (!isBitmapAvailableInMemCache(mPath)) {
GenericDraweeHierarchy hierarchy = setHierarchyForDraweeView(mImageView, 150);
hierarchy.setPlaceholderImage(mAsyncColorDrawable);
hierarchy.setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black));
}
ImageRequest request;
if (mPath.endsWith(".jpg")) {//No i18n
request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(mPath)))
.setLocalThumbnailPreviewsEnabled(true)
.setResizeOptions(new ResizeOptions(width, height))
.build();
} else {
request = ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(mPath)))
.setLocalThumbnailPreviewsEnabled(true)
.build();
}
DraweeController draweeController = Fresco.newDraweeControllerBuilder()
.setControllerListener(new ControllerListener<ImageInfo>() {
@Override
public void onSubmit(String id, Object callerContext) {
}
@Override
public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable animatable) {
}
@Override
public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
}
@Override
public void onIntermediateImageFailed(String id, Throwable throwable) {
}
@Override
public void onFailure(String id, Throwable throwable) {
clearFerscoCache(mPath);
mImageView.setImageURI(Uri.fromFile(new File(mPath)));
}
@Override
public void onRelease(String id) {
}
})
.setOldController(mImageView.getController())
.setImageRequest(request)
.setAutoPlayAnimations(false)
.build();
mImageView.setController(draweeController);
} catch (OutOfMemoryError | Exception e) {
e.printStackTrace();
}
}
SetHierarchyForDraweeView機能
private GenericDraweeHierarchy setHierarchyForDraweeView(SimpleDraweeView draweeView, int duration) {
if (draweeView != null) {
if (draweeView.getHierarchy() == null) {
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(mContext.getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(duration)
.setPlaceholderImage(new AsyncColorDrawable(mContext.getResources()))
.setFailureImage(mContext.getResources().getDrawable(R.drawable.broken_image_black))
.build();
draweeView.setHierarchy(hierarchy);
} else {
GenericDraweeHierarchy hierarchy = draweeView.getHierarchy();
hierarchy.setFadeDuration(duration);
return hierarchy;
}
}
return null;
}
ありがとうございました。しかし、私の場合、mPathとmImageViewは常にnullではありません。 – Karun
私は私の答えを編集しました。 – savepopulation