Ich habe eine benutzerdefinierte Ansicht mit einem DraweeHolder implementiert. Ich habe alle Callbacks und Listener für meine benutzerdefinierte Ansicht implementiert (attach/detach/invalidateDrawable/setListener).Benutzerdefinierte Ansicht und animiertes GIF - gif wird nicht richtig wiedergegeben
Wenn ich eine GIF-Bild-URL auf den Controller setzen - es spielt gif nicht richtig. Es aktualisiert das gif nur, wenn die Ansicht neu gezeichnet wird. Ich nehme an, dass animierte GIFs einen Invalidierungs-Callback oder ähnliches haben sollten.
P.S. Gif funktioniert ordnungsgemäß, wenn ich DraweeView verwende. Auch alle anderen Bilder funktionieren korrekt in meiner benutzerdefinierten Ansicht.
Erstellen von Inhaber:
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;
}
Einstellung Controller:
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());
Bild Anfrage:
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();
}
Haben Sie die ausklappbaren Rückrufe festgelegt? Etwas wie 'mDraweeHolder.getTopLevelDrawable(). SetCallback (yourView);' –
Wie Sie im ersten Block des Codes sehen können - es wird gesetzt –