fix issues with fade animation on palette bitmap wrapper
This commit is contained in:
parent
fb87d6b946
commit
5085bbc1e7
7 changed files with 37 additions and 10 deletions
|
|
@ -34,6 +34,6 @@ public class CustomGlideModule implements GlideModule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
|
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
|
||||||
registry.register(Bitmap.class, BitmapPaletteWrapper.class, new BitmapPaletteTranscoder());
|
registry.register(Bitmap.class, BitmapPaletteWrapper.class, new BitmapPaletteTranscoder(glide.getBitmapPool()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
|
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
|
||||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
import com.bumptech.glide.request.transition.ViewAnimationFactory;
|
|
||||||
import com.bumptech.glide.signature.ObjectKey;
|
import com.bumptech.glide.signature.ObjectKey;
|
||||||
import com.dkanada.gramophone.App;
|
import com.dkanada.gramophone.App;
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
|
import com.dkanada.gramophone.glide.palette.BitmapPaletteCrossFadeFactory;
|
||||||
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
|
import com.dkanada.gramophone.glide.palette.BitmapPaletteWrapper;
|
||||||
|
|
||||||
import org.jellyfin.apiclient.model.dto.ImageOptions;
|
import org.jellyfin.apiclient.model.dto.ImageOptions;
|
||||||
|
|
@ -26,7 +26,6 @@ import static com.bumptech.glide.GenericTransitionOptions.with;
|
||||||
public class CustomGlideRequest {
|
public class CustomGlideRequest {
|
||||||
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
|
public static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.ALL;
|
||||||
public static final int DEFAULT_IMAGE = R.drawable.default_album_art;
|
public static final int DEFAULT_IMAGE = R.drawable.default_album_art;
|
||||||
public static final int DEFAULT_ANIMATION = android.R.anim.fade_in;
|
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
final RequestManager requestManager;
|
final RequestManager requestManager;
|
||||||
|
|
@ -55,7 +54,7 @@ public class CustomGlideRequest {
|
||||||
Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE;
|
Object uri = item != null ? createUrl(item) : DEFAULT_IMAGE;
|
||||||
|
|
||||||
return requestManager.load(uri)
|
return requestManager.load(uri)
|
||||||
.transition(new DrawableTransitionOptions().crossFade());
|
.transition(DrawableTransitionOptions.withCrossFade());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,7 +69,7 @@ public class CustomGlideRequest {
|
||||||
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
||||||
|
|
||||||
return builder.requestManager.asBitmap().load(uri)
|
return builder.requestManager.asBitmap().load(uri)
|
||||||
.transition(new BitmapTransitionOptions().crossFade());
|
.transition(BitmapTransitionOptions.withCrossFade());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,7 +86,7 @@ public class CustomGlideRequest {
|
||||||
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
Object uri = builder.item != null ? createUrl(builder.item) : DEFAULT_IMAGE;
|
||||||
|
|
||||||
return builder.requestManager.as(BitmapPaletteWrapper.class).load(uri)
|
return builder.requestManager.as(BitmapPaletteWrapper.class).load(uri)
|
||||||
.transition(with(new ViewAnimationFactory<>(DEFAULT_ANIMATION)));
|
.transition(with(new BitmapPaletteCrossFadeFactory()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ public abstract class CustomPaletteTarget extends BitmapPaletteTarget {
|
||||||
public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
|
public void onResourceReady(@NonNull BitmapPaletteWrapper resource, Transition<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
super.onResourceReady(resource, glideAnimation);
|
super.onResourceReady(resource, glideAnimation);
|
||||||
onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor()));
|
onColorReady(ThemeUtil.getColor(resource.getPalette(), getDefaultFooterColor()));
|
||||||
view.setImageBitmap(resource.getBitmap());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int getDefaultFooterColor() {
|
protected int getDefaultFooterColor() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.dkanada.gramophone.glide.palette;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
|
||||||
|
import com.bumptech.glide.request.transition.BitmapContainerTransitionFactory;
|
||||||
|
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
|
||||||
|
|
||||||
|
public class BitmapPaletteCrossFadeFactory extends BitmapContainerTransitionFactory<BitmapPaletteWrapper> {
|
||||||
|
public BitmapPaletteCrossFadeFactory() {
|
||||||
|
super(new DrawableCrossFadeFactory.Builder().build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Bitmap getBitmap(BitmapPaletteWrapper current) {
|
||||||
|
return current.getBitmap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,13 +3,16 @@ package com.dkanada.gramophone.glide.palette;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.bumptech.glide.load.engine.Resource;
|
import com.bumptech.glide.load.engine.Resource;
|
||||||
|
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
||||||
import com.bumptech.glide.util.Util;
|
import com.bumptech.glide.util.Util;
|
||||||
|
|
||||||
public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
|
public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
|
||||||
private final BitmapPaletteWrapper bitmapPaletteWrapper;
|
private final BitmapPaletteWrapper bitmapPaletteWrapper;
|
||||||
|
private final BitmapPool bitmapPool;
|
||||||
|
|
||||||
public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper) {
|
public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper, BitmapPool bitmapPool) {
|
||||||
this.bitmapPaletteWrapper = bitmapPaletteWrapper;
|
this.bitmapPaletteWrapper = bitmapPaletteWrapper;
|
||||||
|
this.bitmapPool = bitmapPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
@ -31,6 +34,6 @@ public class BitmapPaletteResource implements Resource<BitmapPaletteWrapper> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void recycle() {
|
public void recycle() {
|
||||||
bitmapPaletteWrapper.getBitmap().recycle();
|
bitmapPool.put(bitmapPaletteWrapper.getBitmap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,5 +11,7 @@ public class BitmapPaletteTarget extends ImageViewTarget<BitmapPaletteWrapper> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) {
|
protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) {
|
||||||
|
if (bitmapPaletteWrapper == null) return;
|
||||||
|
view.setImageBitmap(bitmapPaletteWrapper.getBitmap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,20 @@ import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.bumptech.glide.load.Options;
|
import com.bumptech.glide.load.Options;
|
||||||
import com.bumptech.glide.load.engine.Resource;
|
import com.bumptech.glide.load.engine.Resource;
|
||||||
|
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
||||||
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
|
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
|
||||||
import com.dkanada.gramophone.util.ThemeUtil;
|
import com.dkanada.gramophone.util.ThemeUtil;
|
||||||
|
|
||||||
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
|
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
|
||||||
|
private final BitmapPool bitmapPool;
|
||||||
|
|
||||||
|
public BitmapPaletteTranscoder(BitmapPool bitmapPool) {
|
||||||
|
this.bitmapPool = bitmapPool;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Resource<BitmapPaletteWrapper> transcode(@NonNull Resource<Bitmap> resource, @NonNull Options options) {
|
public Resource<BitmapPaletteWrapper> transcode(@NonNull Resource<Bitmap> resource, @NonNull Options options) {
|
||||||
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(resource.get(), ThemeUtil.generatePalette(resource.get()));
|
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(resource.get(), ThemeUtil.generatePalette(resource.get()));
|
||||||
return new BitmapPaletteResource(bitmapPaletteWrapper);
|
return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue