Markwon/app/src/main/java/ru/noties/markwon/GifAwareAsyncDrawable.java

59 lines
1.8 KiB
Java

package ru.noties.markwon;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import pl.droidsonroids.gif.GifDrawable;
import ru.noties.markwon.renderer.ImageSize;
import ru.noties.markwon.renderer.ImageSizeResolver;
import ru.noties.markwon.spans.AsyncDrawable;
public class GifAwareAsyncDrawable extends AsyncDrawable {
public interface OnGifResultListener {
void onGifResult(@NonNull GifAwareAsyncDrawable drawable);
}
private final Drawable gifPlaceholder;
private OnGifResultListener onGifResultListener;
private boolean isGif;
public GifAwareAsyncDrawable(
@NonNull Drawable gifPlaceholder,
@NonNull String destination,
@NonNull Loader loader,
@Nullable ImageSizeResolver imageSizeResolver,
@Nullable ImageSize imageSize) {
super(destination, loader, imageSizeResolver, imageSize);
this.gifPlaceholder = gifPlaceholder;
}
public void onGifResultListener(@Nullable OnGifResultListener onGifResultListener) {
this.onGifResultListener = onGifResultListener;
}
@Override
public void setResult(@NonNull Drawable result) {
super.setResult(result);
isGif = result instanceof GifDrawable;
if (isGif && onGifResultListener != null) {
onGifResultListener.onGifResult(this);
}
}
@Override
public void draw(@NonNull Canvas canvas) {
super.draw(canvas);
if (isGif) {
final GifDrawable drawable = (GifDrawable) getResult();
if (!drawable.isPlaying()) {
gifPlaceholder.setBounds(drawable.getBounds());
gifPlaceholder.draw(canvas);
}
}
}
}