有没有办法使用Glide来分配一个占位符,但是将这个图像保持原来的大小?
我有一个可变大小的 ImageView(取决于传入的图像),我在调用Glide.with().load().into()之前设置,我想使用占位符,但不希望PH被调整为ImageView的大小,我希望它保持原来的大小.
到目前为止,我找不到办法.
我有一个可变大小的 ImageView(取决于传入的图像),我在调用Glide.with().load().into()之前设置,我想使用占位符,但不希望PH被调整为ImageView的大小,我希望它保持原来的大小.
到目前为止,我找不到办法.
解决方法
Re:
Gregs comment:
我给了另一个镜头(几乎一年的额外的XP),并提出了这一点:
我给了另一个镜头(几乎一年的额外的XP),并提出了这一点:
<ImageView android:scaleType="center" ... />
类似于我的其他解决方案和以下动画包装器:
... .fitCenter() .animate(new PaddingAnimationFactory<>(new DrawableCrossFadeFactory<GlideDrawable>(2000))) .into(imageView) ; class PaddingAnimationFactory<T extends Drawable> implements GlideAnimationFactory<T> { private final DrawableCrossFadeFactory<T> realFactory; @Override public GlideAnimation<T> build(boolean isFromMemoryCache,boolean isFirstResource) { return new PaddingAnimation<>(realFactory.build(isFromMemoryCache,isFirstResource)); } } class PaddingAnimation<T extends Drawable> implements GlideAnimation<T> { private final GlideAnimation<? super T> realAnimation; @Override public boolean animate(T current,final ViewAdapter adapter) { int width = current.getIntrinsicWidth(); int height = current.getIntrinsicHeight(); return realAnimation.animate(current,new PaddingViewAdapter(adapter,width,height)); } } class PaddingViewAdapter implements ViewAdapter { @Override public Drawable getCurrentDrawable() { Drawable drawable = realAdapter.getCurrentDrawable(); if (drawable != null) { int padX = Math.max(0,targetWidth - drawable.getIntrinsicWidth()) / 2; int padY = Math.max(0,targetHeight - drawable.getIntrinsicHeight()) / 2; if (padX != 0 || padY != 0) { drawable = new InsetDrawable(drawable,padX,padY,padY); } } return drawable; } @Override public void setDrawable(Drawable drawable) { if (VERSION.SDK_INT >= VERSION_CODES.M && drawable instanceof TransitionDrawable) { // For some reason padding is taken into account differently on M than before in LayerDrawable // PaddingMode was introduced in 21 and gravity in 23,I think NO_GRAVITY default may play // a role in this,but didn't have time to dig deeper than this. ((TransitionDrawable)drawable).setPaddingMode(TransitionDrawable.PADDING_MODE_STACK); } realAdapter.setDrawable(drawable); } }
省略实现的平凡部分,每个类的构造函数从参数初始化字段.完整代码可在GitHub in TWiStErRob/glide-support.
如果您停留在较旧版本的Glide(3.8.0之前),则可以通过以下方式实现相同的效果:
.fitCenter() .placeholder(R.drawable.glide_placeholder) .crossFade(2000) .into(new GlideDrawableImageViewTarget(imageView) { @Override public void onResourceReady(GlideDrawable resource,GlideAnimation<? super GlideDrawable> animation) { super.onResourceReady(resource,new PaddingAnimation<>(animation)); } })