Я пытаюсь постепенно загрузить JPG большого размера. Я видел эта документация с использованием Fresco, и это именно то, что я хочу: эффект размытия отложенной загрузки. Я взял их код из репозитория образец, который выглядит следующим образом:
ImageFormatProgressiveJpegFragment.java
private void setImageUri(Uri uri) {
mDebugOutput.setText("");
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setProgressiveRenderingEnabled(mProgressiveRenderingEnabled)
.build();
DraweeController controller =
Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setRetainImageOnFailure(true)
.setPerfDataListener(mImagePerfDataListener)
.setControllerListener(
new BaseControllerListener<ImageInfo>() {
@Override
public void onFinalImageSet(
String id,
@javax.annotation.Nullable ImageInfo imageInfo,
@javax.annotation.Nullable Animatable animatable) {
if (imageInfo != null) {
QualityInfo qualityInfo = imageInfo.getQualityInfo();
logScan(qualityInfo, true);
}
}
@Override
public void onIntermediateImageSet(
String id, @javax.annotation.Nullable ImageInfo imageInfo) {
if (imageInfo != null) {
QualityInfo qualityInfo = imageInfo.getQualityInfo();
logScan(qualityInfo, false);
}
}
@Override
public void onIntermediateImageFailed(String id, Throwable throwable) {
mDebugOutput.append(
String.format(
Locale.getDefault(),
"onIntermediateImageFailed, %s\n",
throwable.getMessage()));
}
})
.build();
mSimpleDraweeView.setController(controller);
}
private void logScan(QualityInfo qualityInfo, boolean isFinalImage) {
mDebugOutput.append(
String.format(
Locale.getDefault(),
"%s: %s, goodEnough=%b, fullQuality=%b, quality=%d\n\n",
mDateFormat.format(new Date(System.currentTimeMillis())),
isFinalImage ? "final" : "intermediate",
qualityInfo.isOfGoodEnoughQuality(),
qualityInfo.isOfFullQuality(),
qualityInfo.getQuality()));
}
результат — это вывод информации об изображении при его загрузке.
Мой код выглядит так же, за исключением частичной замены логов:
MyFrescoActivity.java
private String IMAGE_URL = "https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73726/world.topo.bathy.200406.3x5400x2700.png";
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(IMAGE_URL))
.setProgressiveRenderingEnabled(true)
.build();
DraweeController controller =
Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setRetainImageOnFailure(true)
.setPerfDataListener(this)
.setControllerListener(
new BaseControllerListener<ImageInfo>() {
@Override
public void onFinalImageSet(
String id,
@Nullable ImageInfo imageInfo,
@Nullable Animatable animatable) {
if (imageInfo != null) {
QualityInfo qualityInfo = imageInfo.getQualityInfo();
logScan(qualityInfo, true);
}
}
@Override
public void onIntermediateImageSet(
String id, @Nullable ImageInfo imageInfo) {
if (imageInfo != null) {
QualityInfo qualityInfo = imageInfo.getQualityInfo();
logScan(qualityInfo, false);
}
}
@Override
public void onIntermediateImageFailed(String id, Throwable throwable) {
Log.i("DraweeUpdate",
String.format(
Locale.getDefault(),
"onIntermediateImageFailed, %s\n",
throwable.getMessage()));
}
})
.build();
simpleDraweeView.setController(controller);
}
private void logScan(QualityInfo qualityInfo, boolean isFinalImage) {
Log.i("DraweeUpdate", String.format(
Locale.getDefault(),
"%s: %s, goodEnough=%b, fullQuality=%b, quality=%d\n\n",
"",
isFinalImage ? "final" : "intermediate",
qualityInfo.isOfGoodEnoughQuality(),
qualityInfo.isOfFullQuality(),
qualityInfo.getQuality()));
}
Тем не менее, я не получаю ответов на onIntermediateImageSet. Единственное, что вызывается у этого слушателя, — это onFinalImageSet, когда изображение полностью загружено. Кто-нибудь имеет представление о том, что происходит?
Вы можете попробовать протестировать с эмулятором и типом сети, установленным на GPRS.
Изменен IMAGE_URL на правильно отформатированный URL-адрес прогрессивного JPEG, и это сработало - lwstatic-a.akamaihd.net/kb/wp-content/uploads/2017/12/…
Не уверен насчет 1. ; Что ты имеешь в виду?
.setProgressiveRenderingEnabled(true)? ; 2. Не из кеша, я каждый раз переустанавливаю приложение для проверки, что приводит к 3. с моим Ethernet занимает около 40 секунд, чтобы загрузить большое тестовое изображение, такое как вIMAGE_URL