Closed xiaoxiaohua333 closed 2 years ago
what‘s wrong with the effect? Please run the sample app to see.
不支持CenterCrop() 还有RoundedCorners一起使用吗
@857288218 支持,多种效果组合可以使用MultiTransform
When playing animated webp on Xiaomi 10, centerCrop doesn't work right. These are spaces in bottom and right side.
I can't set fitCenter() to animated webp, no image will be shown.
Code (kotlin):
GlideApp.with(context).load(stickerFile)
.listener(requestListener)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.transition(GenericTransitionOptions.with(android.R.anim.fade_in))
.dontAnimate()
.fitCenter()
.into(imageView)
Error in logs:
Error loading image /sdcard/stickers/shy/shy4.webp
com.bumptech.glide.load.engine.GlideException: Failed to load resource
Caused by: java.lang.IllegalArgumentException: Unable to convert com.bumptech.glide.integration.webp.decoder.WebpDrawable@c40c1d0 to a Bitmap
at com.bumptech.glide.load.resource.bitmap.DrawableTransformation.transform(DrawableTransformation.java:55)
at com.bumptech.glide.load.engine.DecodeJob.onResourceDecoded(DecodeJob.java:568)
at com.bumptech.glide.load.engine.DecodeJob$DecodeCallback.onResourceDecoded(DecodeJob.java:632)
at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:60)
at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)
at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)
at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:529)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:493)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:479)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:430)
at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:394)
at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)
at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)
at com.bumptech.glide.load.model.ByteBufferFileLoader$ByteBufferFetcher.loadData(ByteBufferFileLoader.java:62)
at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:920)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)
All is working good without fitCenter(). But GIF animations without fitCenter() are not playable when ImageView is much larger than real image size. So I'm using a workaround
if (stickerFile.extension == "gif") {
// required to play animation, but webp not works with this transform
loader.fitCenter()
}
before calling loader.load()
My build config: implementation "com.github.bumptech.glide:glide:4.12.0" implementation "com.zlc.glide:webpdecoder:2.0.4.12.0" kapt "com.github.bumptech.glide:compiler:4.12.0"
I can't set fitCenter() to animated webp, no image will be shown.
Code (kotlin):
GlideApp.with(context).load(stickerFile) .listener(requestListener) .diskCacheStrategy(DiskCacheStrategy.ALL) .transition(GenericTransitionOptions.with(android.R.anim.fade_in)) .dontAnimate() .fitCenter() .into(imageView)
Error in logs:
Error loading image /sdcard/stickers/shy/shy4.webp com.bumptech.glide.load.engine.GlideException: Failed to load resource Caused by: java.lang.IllegalArgumentException: Unable to convert com.bumptech.glide.integration.webp.decoder.WebpDrawable@c40c1d0 to a Bitmap at com.bumptech.glide.load.resource.bitmap.DrawableTransformation.transform(DrawableTransformation.java:55) at com.bumptech.glide.load.engine.DecodeJob.onResourceDecoded(DecodeJob.java:568) at com.bumptech.glide.load.engine.DecodeJob$DecodeCallback.onResourceDecoded(DecodeJob.java:632) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:60) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:529) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:493) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:479) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:430) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:394) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.ByteBufferFileLoader$ByteBufferFetcher.loadData(ByteBufferFileLoader.java:62) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)
All is working good without fitCenter(). But GIF animations without fitCenter() are not playable when ImageView is much larger than real image size. So I'm using a workaround
if (stickerFile.extension == "gif") { // required to play animation, but webp not works with this transform loader.fitCenter() }
before calling loader.load()
My build config: implementation "com.github.bumptech.glide:glide:4.12.0" implementation "com.zlc.glide:webpdecoder:2.0.4.12.0" kapt "com.github.bumptech.glide:compiler:4.12.0"
you should use WebpDrawableTransformation to wrap your original fitCenter transformation because it can only handle Bitmap not Drawable.
device : Pixel 2 / android 9
implementation 'com.github.bumptech.glide:glide:4.10.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' implementation "com.zlc.glide:webpdecoder:1.6.4.10.0"
Just use FitCenter / CircleCrop
Transformation fitCenter = new FitCenter();
request.optionalTransform(fitCenter)
.optionalTransform(WebpDrawable.class, new WebpDrawableTransformation(fitCenter));