Я реализовал пользовательское представление с DraweeHolder. Я реализовал все обратные вызовы и прослушиватели для своего пользовательского представления (attach/detach/invalidateDrawable/setListener).
Если я установлю URL-адрес изображения GIF для контроллера, он не будет правильно воспроизводить GIF. Он обновляет gif только при перерисовке вида. Я думаю, что анимированный GIF должен иметь какой-то обратный вызов аннулирования или что-то в этом роде.
P.S. Gif работает правильно, если я использую DraweeView. Также все остальные изображения работают правильно в моем пользовательском представлении.
Создание держателя:
private DraweeHolder<GenericDraweeHierarchy> createComponentHolder(View parent, Context context) {
GenericDraweeHierarchy componentHierarchy = new GenericDraweeHierarchyBuilder(parent.getResources())
.setRoundingParams(RoundingParams.fromCornersRadius(LayoutHelper.dp(3)).setBorder(Theme.COLOR_MEDIA_BORDER, 1))
.build();
DraweeHolder<GenericDraweeHierarchy> holder = DraweeHolder.create(componentHierarchy, context);
holder.getTopLevelDrawable().setCallback(parent);
return holder;
}
Настройка контроллера:
PipelineDraweeControllerBuilder controllerBuilder = Fresco.newDraweeControllerBuilder()
.setImageRequest(MediaHelper.getImageRequest(filePath))
.setAutoPlayAnimations(true)
.setControllerListener(controllerListener)
.setOldController(draweeHolder.getController());
if (thumbUrl != null) {
controllerBuilder.setLowResImageRequest(getThumbnailRequest(thumbUrl));
}
draweeHolder.setController(controllerBuilder.build());
Запрос изображения:
public static ImageRequest getImageRequest(String filePath) {
int imageSize = LayoutHelper.dp(100);
return ImageRequestBuilder.newBuilderWithSource(Uri.fromFile(new File(filePath)))
.setResizeOptions(new ResizeOptions(imageSize, imageSize))
.setAutoRotateEnabled(true)
.build();
}
mDraweeHolder.getTopLevelDrawable().setCallback(yourView);
- person Alexander Oprisnik   schedule 15.07.2016