59 lines
1.8 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
}
|