- improve: ResourceUriFetcher now returns ResourceDataSource for raw resources
- fix: Try again to fix the HttpUriFetcher.IOException exception that can't be caught #176
- new: Size added Empty constant
- improve: Sketch now changes all ImageView references to weak references, avoid false positives by LeakCanary
- fix: Fixed a bug where SketchZoomImageView's auto-pause feature based on lifecycle could cause subsampling exceptions
- fix: Fixed a bug where subsampling could not work after scaling exceeded the maximum scale
- improve: Subsampling can now be turned on when the aspect ratio differs by 0.50f
- improve: Use WeakReference to improve RingProgressDrawable and avoid false positives by LeakCanary
- change: Redesign ErrorStateImage
- improve: AsyncImagePainter no longer converts BitmapDrawable and ColorDrawable to BitmapPainter and ColorPainter
- improve: Improve AsyncImage(), rememberAsyncImagePainter(), SubcomposeAsyncImage()
- change: 'exception: SketchException' for ImageResult.Error was changed to 'throwable: Throwable' and UnknownException was removed
- improve: Compatible with still images encoded using WebP Animated panpf Moments ago #179
- improve: Improved memory caching, now all BitmapDrawable is converted to SketchCountBitmapDrawable in MemoryCacheRequestInterceptor and cached in memory, so all BitmapDecoders can return BitmapDrawable directly
- fix: Again try fixing child thread exceptions may not catch bugs that cause your app to crash #176
- fix: When the merged() method of ImageOptions has its own componentRegistry as null and other’s componentRegistry is not null, the returned componentRegistry is still null
- fix: Fixed an issue where AnimatableDrawable could not be played when used as a placeholder when resizeApplyToDrawable was turned on
- change: Remove HttpStack.getResponse() method suspend modifier
- change: BitmapDecoder, DrawableDecoder, Fetcher, BitmapDecodeInterceptor, DrawableDecodeInterceptor, RequestInterceptor return results wrapped in Result
- improve: IOException is no longer thrown when deleting disk cache files fails
- fix: Fixing child thread exceptions may not catch bugs that cause your app to crash #176
- change: The DataSource's newInputStream() and file() methods are now split into BasedStreamDataSource and BasedFileDataSource
- new: Added supportAnimatedGif(), supportAnimatedWebp(), supportAnimatedHeif() for configuring gif in a more understandable way
- fix: Fixed a bug where the AsyncImage function was not compatible with compose version 1.3.1
- improve: Deprecate imageUri plus configBlock version of AsyncImage, add only the imageUri version instead
- upgrade: Upgrade compose 1.3.1
- change: The deprecated AppIconBitmapDecoder does not need to be configured anymore
- new: Added supportAppIcon() for configuring app icons in a more understandable way
- new: Added supportApkIcon() for configuring apk icons in a more understandable way
- new: Added supportKoralGif() for configuring gif in a more understandable way
- new: Added supportMovieGif() for configuring gif in a more understandable way
- new: Added supportSvg() for configuring svg in a more understandable way
- new: Added supportVideoFrame() for configuring video frame in a more understandable way
- new: Added supportFFmpegVideoFrame() for configuring video frame in a more understandable way
- improve: Improved implementation of the equals method, which now always returns false when compared to subclasses
- upgrade: Upgrade compile sdk to 33
- upgrade: Upgrade androidx activity 1.6.1, annotation 1.5.0, appcompat 1.6.0, compose animation and ui 1.3.3, core 1.9.0, exifinterface 1.3.5, fragment 1.5.5
- upgrade: Upgrade androidx activity 1.6.1, annotation 1.5.0, appcompat 1.6.0, compose animation and ui 1.3.3, core 1.9.0, exifinterface 1.3.5, fragment 1.5.5
- change: The DataSource's newInputStream() and file() methods are now split into BasedStreamDataSource and BasedFileDataSource
- new: Added supportAnimatedGif(), supportAnimatedWebp(), supportAnimatedHeif() for configuring gif in a more understandable way
- fix: Fixed a bug where the AsyncImage function was not compatible with compose version 1.3.1
- improve: Deprecate imageUri plus configBlock version of AsyncImage, add only the imageUri version instead
- upgrade: Upgrade compose 1.3.1
- change: The deprecated AppIconBitmapDecoder does not need to be configured anymore
- new: Added supportAppIcon() for configuring app icons in a more understandable way
- new: Added supportApkIcon() for configuring apk icons in a more understandable way
- new: Added supportKoralGif() for configuring gif in a more understandable way
- new: Added supportMovieGif() for configuring gif in a more understandable way
- new: Added supportSvg() for configuring svg in a more understandable way
- new: Added supportVideoFrame() for configuring video frame in a more understandable way
- new: Added supportFFmpegVideoFrame() for configuring video frame in a more understandable way
- improve: Improved implementation of the equals method, which now always returns false when compared to subclasses
- upgrade: Upgrade compile sdk to 33
BitmapPool:
- fix: Fixed the bug that the put method of LruBitmapPool failed to put the second bitmap when encountering a bitmap with the same size and config but not the same instance
- improve: Improve LruBitmapPool
Decode:
- fix: Fixed BitmapPool will still be accessed when disallowReuseBitmap is true
- improve: Improve freeBitmap performance and reduce main thread lag
- new: BitmapDecodeInterceptor, DrawableDecodeInterceptor support sorting
Drawable:
- improve: Improve ScaledAnimatedImageDrawable
HTTP:
- change: Add the suspend keyword to the getResponse() method of HttpStack #167
- new: HurlStack and OkHttpStack now support enabling protocols such as TLS 1.1 and 1.2
MemoryCache:
- change: MemoryCache now stores MemoryCache.Value
- change: MemoryCache adds keys() method
DiskCache:
- fix: Fixed bug where process names could not be correctly obtained in APi 17 and later
- fix: Fixed a bug where the GET method of LruDiskCache throws NullPointException
- improve: LruDiskCache will now automatically delete cache records of lost files
Request:
- fix: Fixed a bug where equals to ImageRequest and their newRequest() result in false
- fix: Fixed a bug in RequestInterceptor where modifying SizeResolver does not take effect
- fix: Fixed the bug that the newRequest method of ImageRequest would nest one more layer of listener and progressListener every time it called
- improve: Improve the request key and cacheKey
- new: RequestInterceptor support sorting
Resize:
- remove: Remove fixedPrecision(), longImageClipPrecision(), fixedScale(), longImageScale() functions
- change: To refactor the Resize
- change: Simplification resize() overloading method of ImageOptions and ImageRequest
- change: resize precision default changed to always LESS_PIXELS
- change: ResizeDrawable now uses Size and Scale directly
- improve: LongImageScaleDecider construction parameters now have default values
StateImage:
- change: Now getDrawable for the placeholder and error StateImage is null and no longer calls setImageDrawable for the ImageView
- new: Added ThumbnailMemoryCacheStateImage #166
- new: Now the final state Drawable implements the SketchStateDrawable interface
Other:
- remove: Remove BitmapInfo
- improve: Reduce w-level logs to avoid performance impact due to logs
- improve: Improve Equals and hashCode
- improve: Improve the code
- improve: Improve the log
- fix: Fixed bug where AsyncImage and SubcomposeAsyncImage would cause constant recomposition
- fix: Fixed AsyncImage and AsyncImagePainter always change resize precision to EXACTLY bug
- fix: Fixed bug that AsyncImagePainter did not inherit CrossfadeTransition.Factory.fadeStart property
- fix: Fixed bug where AsyncImagePainter would ignore nested Drawables when updating display count
- improve: AsyncImage now uses dedicated DisplayTarget, SizeResolver, ScaleDecider
- build: Upgraded appcompanist to 0.25.1
- change: Replace PauseLoadWhenScrollingDisplayInterceptor with PauseLoadWhenScrollingDrawableDecodeInterceptor, And remove pauseLoadWhenScrollingError()
- improve: Improve MovieDrawable
- improve: Improve GifDrawableDrawableDecoder
- improve: To unify various Gif Drawable logic MovieDrawable no longer uses BitmapPool
- improve: Improve SketchZoomImageView scroll bar style
- fix: Fixed the bug that SketchZoomImageView will still access MemoryCache when the read or write of memoryCachePolicy is not ENABLED
- fix: Fixed a bug where SketchZoomImageView would also trigger subsampling when encountering a state image
- fix: Fixed a bug where SketchZoomImageView might sometimes sample tiles not loading
- fix: Fixed the bug that when SketchZoomImageView is nested in ViewPager, it cannot return the swipe event to ViewPager when it reaches the edge and then swipes
- change: Refactor Scales. Scales rename to ScaleState,SketchImageView's scalesFactory property rename to scaleStateFactory
- improve: Improve zoom
- build: compileSdk upgraded to 32
- build: Upgrade android build plugin 7.3.1 and kotlin 1.7.20
- fix: Fixed bug where process names could not be correctly obtained in APi 17 and later
- improve: To unify various Gif Drawable logic MovieDrawable no longer uses BitmapPool
- new: RequestInterceptor, BitmapDecodeInterceptor, DrawableDecodeInterceptor support sorting
- new: HurlStack and OkHttpStack now support enabling protocols such as TLS 1.1 and 1.2
- fix: Fixed a bug that caused SketchZoomImageView to run out of memory when swiping quickly
- improve: Improve SketchZoomImageView scroll bar style
- fix: Fixed bug where requestKey did not decode
- fix: Fixed a bug where the GET method of LruDiskCache throws NullPointException
- change: To refactor the Resize
- change: ResizeDrawable now uses Size and Scale directly
Request:
- fix: Fixed a bug where equals to ImageRequest and their newRequest() result in false
- fix: Fixed a bug in RequestInterceptor where modifying SizeResolver does not take effect
- fix: Fixed the bug that the newRequest method of ImageRequest would nest one more layer of listener and progressListener every time it called
- improve: Improve the request key and cacheKey
Resize:
- change: Simplification resize() overloading method of ImageOptions and ImageRequest
- change: resize precision default changed to always LESS_PIXELS
DiskCache:
- improve: LruDiskCache will now automatically delete cache records of lost files
StateImage:
- change: Now getDrawable for the placeholder and error StateImage is null and no longer calls setImageDrawable for the ImageView
Other:
- improve: LongImageScaleDecider construction parameters now have default values
- improve: Reduce w-level logs to avoid performance impact due to logs
- improve: Improve ScaledAnimatedImageDrawable
- improve: Improve Equals and hashCode
- improve: Improve the code
- improve: Improve the log
- change: Replace PauseLoadWhenScrollingDisplayInterceptor with PauseLoadWhenScrollingDrawableDecodeInterceptor, And remove pauseLoadWhenScrollingError()
- fix: Fixed bug where AsyncImage and SubcomposeAsyncImage would cause constant recomposition
- fix: Fixed AsyncImage and AsyncImagePainter always change resize precision to EXACTLY bug
- fix: Fixed bug that AsyncImagePainter did not inherit CrossfadeTransition.Factory.fadeStart property
- fix: Fixed bug where AsyncImagePainter would ignore nested Drawables when updating display count
- improve: AsyncImage now uses dedicated DisplayTarget, SizeResolver, ScaleDecider
- improve: Improve MovieDrawable
- improve: Improve GifDrawableDrawableDecoder
- fix: Fixed BitmapPool will still be accessed when disallowReuseBitmap is true
- remove: Remove fixedPrecision(), longImageClipPrecision(), fixedScale(), longImageScale() functions
- remove: Remove BitmapInfo
- improve: Improve freeBitmap performance and reduce main thread lag
- new: Now the final state Drawable implements the SketchStateDrawable interface
- fix: Fixed the bug that SketchZoomImageView will still access MemoryCache when the read or write of memoryCachePolicy is not ENABLED
- fix: Fixed a bug where SketchZoomImageView would also trigger subsampling when encountering a state image
- improve: Improve LruBitmapPool
- fix: Fixed the bug that the put method of LruBitmapPool failed to put the second bitmap when encountering a bitmap with the same size and config but not the same instance
- bug: Fixed a bug where SketchZoomImageView might sometimes sample tiles not loading
- bug: Fixed the bug that when SketchZoomImageView is nested in ViewPager, it cannot return the swipe event to ViewPager when it reaches the edge and then swipes
- change: Refactor Scales. Scales rename to ScaleState,SketchImageView's scalesFactory property rename to scaleStateFactory
- improve: Improve zoom
- change: MemoryCache now stores MemoryCache.Value
- change: MemoryCache adds keys() method
- change: Add the suspend keyword to the getResponse() method of HttpStack #167
- new: Added InexactlyMemoryCacheStateImage #166
- improve: Improve zoom
New version, new beginning
- change: maven groupId changed to
io.github.panpf.sketch3
, so version 2.* will not prompt to upgrade - change: Changed the package name to
com.github.panpf.sketch
so it won't conflict with the 2.* version - change: Based on kotlin coroutine rewrite, API and function implementation are all changed, just use a new library
- improve: It is no longer required to use SketchImageView, any ImageView and its subclasses can, combined with custom Target can support any View
- improve: The Zoom function is split into independent modules that can be independently relied on, and the large image sampling function is refactored and multi-threaded decoding is faster.
- improve: The gif module now directly depends on the android-gif-drawable library and no longer needs to be modified twice, and can be upgraded by itself
- new: Added support for SVG
- new: Added support for Jetpack Compose
- new: Support for request and decode interceptors
- new: Refer to coil v2.2.0 version and combine it with the original functions of sketch. Compared
with coil, there are the following differences:
- Sketch supports minimum API 16, while coil only supports API 21 minimum
- Sketch supports bitmap multiplexing, but coil does not
- Sketch supports finer adjustment of image size
- Sketch clearly distinguishes between display, load, and download requests
- Sketch provides a picture zoom display component and supports large picture sampling
- fix: Fixed the bug that the transformedList of the DrawableDecodeResult returned by DefaultDrawableDecoder was always null
- change: RequestInterceptor, BitmapDecodeInterceptor and DrawableDecodeInterceptor add key attribute
- improve: Improve HttpUriFetcher
- new: Added 'extras: Map<String, String>' property to DisplayResult and LoadResult to facilitate passing more information during decoding or transform stage
- new: ImageRequest and ImageOptions supports ComponentRegistry, you can configure components that only work on the current ImageRequest
- fix: Fixed the bug that BitmapResultCacheDecodeInterceptor may cause multiple writes to the cache when the same image is loaded multiple times
- improve: BlurTransformation now actively recycles intermediate bitmaps
- fix: Fixed the bug that BlurTransformation put input Bitmap to BitmapPool causing exception
- improve: Logger now outputs thread name
- improve: The log level for DepthException errors is now WARNING
- improve: LruBitmapPool intercepts repeated put the same bitmap
- improve: The history of the Bitmap can now be obtained from the log
- improve: Added ImageInvalidException to specifically represent invalid image file exceptions
- rename: ImageView.result rename to ImageView.displayResult
- rename: ImageView.dispose() rename to ImageView.disposeDisplay()
- new: Size adds isSameAspectRatio extension function
- fix: No longer use getRunningAppProcesses() method to avoid failure of privacy audit
- improve: Improve reset log of SketchZoomImageView
- change: The DataSource.file() method removes the suspend tag
- improve: Remove url escape characters in ImageRequest key and cacheKey
- fix: Fixed the bug that the tile and preview image of SketchZoomImageView are misplaced
- fix: Fixed the bug that BitmapResultCacheDecodeInterceptor still writes Bitmap to the result cache when BitmapDecodeResult.transformedList is empty
- improve: Improve toString of FixedScaleDecider and FixedPrecisionDecider
- rename: transition rename to transitionFactory
- rename: Resize's precision and scale rename to precisionDecider and scaleDecider
- improve: Manually close ImageDecoder
- improve: Improved Parameters
- improve: CircleCropTransformation now defaults to get scale from ImageRequest.resizeScaleDecider
- new: CrossfadeTransition now supports setting fadeStart
- rename: videoFramePercentDuration rename to videoFramePercent
- improve: Improve exception information for VideoFrameBitmapDecoder and FFmpegVideoFrameBitmapDecoder
- new: Support setting custom CSS rules for SVG
- improve: Improve AsyncImage based on coil v2.1.0
- fix: Fixed the bug that the callback of the sub-drawables of CrossfadeDrawable, IconDrawable, ScaledAnimatedImageDrawable would be lost, causing the sub-animation Drawable to fail to play
- change: CrossfadeDrawable default duration changed from 100ms to 200ms
- new: Added 'exist(): Boolean' method to BitmapPool and DiskCache
- improve: Improved animation of RingProgressDrawable
upgrade: Upgrade the latest version of kotlin and androidx library
- change: RequestInterceptor is now executed on the main thread and Target.start() is now executed after checking the memory cache
- change: BitmapPool remove setInBitmap(), setInBitmapForRegion(), free
- improve: MemoryCache no longer needs edit lock
- fix: Fixed the bug that SketchZoomImageView location() is not as expected
- fix: Fixed the bug that the center point pans when SketchZoomImageView zooms with one finger up #160
- improve: SketchZoomImageView translate image during scale
- improve: Improve SketchZoomImageView
- improve: 'sketch-gif-koral' no longer depends on 'sketch-gif-movie'
Cache:
- fix: Fixed the bug that LruBitmapPool does not support RGBA_F16
- change: Now the download cache directory name is 'download', and the result cache directory name is 'result'
- change: LruMemoryCache.put() now intercepts larger bitmaps
- rename: downloadDiskCache rename to downloadCache, resultDiskCache rename to resultCache, DISK_CACHE rename to DOWNLOAD_CACHE, RESULT_DISK_CACHE rename to RESULT_CACHE
- improve: Improve disk cache
Request:
- fix: Fixed the bug that the bitmap cannot be placed in the BitmapPool without using CountBitmap when the memory cache is disabled
- change: Now RequestInterceptor runs in worker thread, and Target.onStart() is executed before RequestInterceptor
- change: Remove Transformed and JsonSerializable
- change: Refactor DownloadData
- change: imageExifOrientation property merged into ImageInfo
- new: Restore Sketch.globalImageOptions, because now placeholder is used before request interceptor
Decoder:
- fix: Fixed BaseAnimatedImageDrawableDecoder registration callback is crash bug
- fix: Fixed the bug that Bitmap read from Result cache is always immutable
- rename: SketchImageView's registerListener(), unregisterListener(), registerProgressListener(), unregisterProgressListener() rename to registerDisplayListener(), unregisterDisplayListener(), registerDisplayProgressListener(), unregisterDisplayProgress
Decoder:
- fix: Fixed the bug that XmlDrawableBitmapDecoder do not support bitmapConfig
Sketch:
- remove: Remove Sketch.globalImageOptions
- remove: Removed Sketch.longImageDecider and can now specify LongImageDecider when creating LongImageScaleDecider, LongImageClipPrecisionDecider, LongImageReadModeDecider
ImageRequest:
- change: ImageRequest.Builder.global() rename to default()
- change: The type of the error property of ImageOptions and ImageRequest is changed to ErrorStateImage
Other:
- fix: Fixed ImageOptions bug that error is still null when stateImage is null and configBlock is not null
- improve: DepthException no longer prints stack information
- fix: Fixed a bug where the click to ignore cellular data saving feature did not work
- fix: Fixed the bug that ApkIconBitmapDecoder, AppIconBitmapDecoder do not support bitmapConfig
- new: SketchZoomImageView added touchPointToDrawablePoint method
Decoder:
- fix: Fixed the bug that XmlDrawableBitmapDecoder does not support loading vector resources from other packages in versions below 7.0
- improve: Replace ResourcesCompat with AppCompatResources
Logger:
-
rename: Logger's construction parameter _level is rename to level
-
fix: Fixed the bug of abnormal transparency of placeholder drawable
DataSource:
- remove: DataSource remove newFileDescriptor method
DiskCache:
- change: Sketch.diskCache split into downloadDiskCache and resultDiskCache
- change: Change the version attribute of LruDiskCache to appVersion and add the internalVersion attribute
ImageRequest:
- new: Add enqueue() and execute() methods for DisplayRequest, DownloadRequest, LoadRequest
Fetcher:
- new: Added newResourceUri(String, String) and newResourceUri(Int) function
- new: Added newResourceUri(String, String) and newResourceUri(Int) function
- new: Added newFileUri(File) function
SketchImageView:
- new: SketchImageView added registerListener(), unregisterListener(), registerProgressListener(), unregisterProgressListener() method
Transformation:
- new: Added BlurTransformation and MaskTransformation
Transition:
- new: CrossfadeTransition.Factory added alwaysUse property
StateImage:
- new: Added CurrentStateImage
- fix: Fixed a bug where SketchZoomImageView would cause ViewPager to fail to slide
- change: Now move ZoomAbility's functional methods into SketchZoomImageView
Resize:
- fix: Fixed the bug that the final image content is wrong when precision is LESS_PIXELS and the image size is smaller than the resize size
Target:
- rename: ViewTarget rename to ViewDisplayTarget
- new: Added RemoteViewsDisplayTarget to display image to RemoteViews
DiskCache:
- fix: Fixed the bug that the contentType disk cache does not take effect
MemoryCache:
- log: Improved log for LruMemoryCache and LruDiskCache
ViewAbility:
- new: ViewAbility support onSaveInstanceState() and onRestoreInstanceState()
Other:
- fix: Fixed the bug that the ResizeAnimatableDrawable stop() method does not take effect
- remove: DepthException removes the depth property, UriInvalidException removes the uri property
- remove: SketchException no longer contains ImageRequest
- remove: SketchException no longer contains ImageRequest
- change: The message of UnknownException cannot be null
- improve: Improve the code
Docs:
- docs: Improve docs
Build:
- build: Improve build
- build: Add project icon for IntelliJ project list
- fix: Fixed the bug that the length() method of AssetDataSource and ResourceDataSource crashed in versions below KITKAT
- remove: Remove BlurTransformation
- change: In order to be compatible with the bug of webp in JELLY_BEAN_M3 and below versions, the imageType is no longer checked after decoding the Image boundary information
- change: DiskCache implements the Closeable interface and close it when Sketch shutdown
- new: ImageOptions and ImageRequest add resize(Resize?) method
- new: SketchDrawable adds requestCacheKey property
ImageRequest:
- fix: Fixed the bug that the cacheKey of ImageRequest always contains the parameter whose cacheKey is null
- improve: Improve the return result of ImageRequest's newKey() and newCacheKey() methods
- new: DisplayResult, DisplayData, LoadResult, LoadData increased imageExifOrientation and transformedList properties
Decode:
- fix: InSampledTransformed is not added when the decoded Bitmap is not shrunk
- improve: Use BufferedInputStream when decoding to improve decoding speed
HTTP:
- fix: Fixed the bug of deduplication in the addExtraHeaders() method of HurlStack.Builder
StateImage:
- rename: newErrorStateImage() rename to ErrorStateImage()
AnimatedImage:
- change: repeatCount() , animationStartCallback(), animationEndCallback(), animatedTransformation() extension methods are changed to extension properties
- rename: showMimeTypeLogoWithResId() rename to showMimeTypeLogoWithRes()
- rename: ArcProgressDrawable rename to SectorProgressDrawable
- improve: RingProgressDrawable and SectorProgressDrawable constructor parameters now have default values
- improve: Improve ViewAbility
- fix: Fixed the bug of deduplication in the addExtraHeaders() method of OkHttpStack.Builder
- change: videoFrameMicros(), videoFramePercentDuration(), videoFrameOption() extension methods are changed to extension properties
ImageRequest:
- fix: Fixed the bug that GlobalLifecycle does not adapt to LifecycleEventObserver, causing the request to fail when the target is not ViewTarget
- remove: Remove lowQualityBitmapConfig() and highQualityBitmapConfig()
- remove: Remove the downloadDiskCacheKey property of ImageRequest
- remove: Remove MIDDEN_QUALITY
- remove: DisplayRequest, DownloadRequest, LoadRequest, ImageOptions remove Builder top-level creation functions
- rename: errorImage rename to error
- rename: placeholderImage rename to placeholder
- rename: disabledAnimatedImage rename to disallowAnimatedImage
- rename: disabledReuseBitmap rename to disallowReuseBitmap
- rename: RequestDepth rename to Depth
- rename: LOW_QUALITY rename to LowQuality, HIGH_QUALITY rename to HighQuality
- rename: downloadDiskCachePolicy rename to downloadCachePolicy, bitmapResultDiskCachePolicy rename
- rename: The resizeSize(SizeResolver) method of ImageRequest and ImageOptions has been renamed to resizeSizeResolver(SizeResolver)
- rename: The merge() method of HttpHeaders and Parameters has been renamed to merged() to resultCachePolicy, bitmapMemoryCachePolicy rename to memoryCachePolicy
- change: depthFrom moved to 'sketch-extensions' module
- change: ImageRequest no longer holds Sketch
- change: ScreenSizeResolver rename to DisplaySizeResolver
- change: DisplayRequest(String?, ImageView, (DisplayRequest.Builder.() -> Unit)) method signature changed to DisplayRequest(ImageView, String?, (DisplayRequest.Builder.() -> Unit))
- change: Refactor ImageRequest and ImageOptions resize
- change: Now GenericViewTarget updates drawable on errors even if errorDrawable is null
- improve: All ImageResult implementations are now data classes
- improve: ImageRequest uses ImageOptions to store property
- new: HttpHeaders added newHttpHeaders(), Parameters added newParameters()
- new: ImageRequest adds newMemoryCacheKey(), newResultCacheDataKey(), newResultCacheMetaKey() extension methods
- new: Added isNotEmpty() extension method to HttpHeaders and ImageOptions
Sketch:
- remove: Remove static ComponentRegistry.new()
- rename: ComponentRegistry.new() rename to newRegistry()
- change: addRequestInterceptor(), addBitmapDecodeInterceptor(), addDrawableDecodeInterceptor() from Sketch moved to ComponentRegistry
- new: Sketch added shutdown() method
Decoder:
- fix: Fixed the bug of samplingSizeForRegion() returning wrong result in api 24 and 25
- fix: Fixed the bug that the returned Bitmap has the wrong size when the difference between the resize and the original image's number of pixels does not exceed 10% and the precision is LESS_PIXELS
- fix: Fixed bug that resizePrecision is 'EXACTLY' when resizeSize is not set
- fix: Fixed HARDWARE crash when setting inBitmap
- move: ImageFormat move to 'com.github.panpf.sketch.decode.internal' package
- rename: calculateSamplingSize() rename to samplingSize(), calculateSamplingSizeForRegion() rename
- removes: BitmapPool's get() method removes the operator
- change: ImageFormat.valueOfMimeType() change to mimeTypeToImageFormat()
- change: DecodeInterceptor is split into BitmapDecodeInterceptor and DrawableDecodeInterceptor
- change: RequestExtras and CountDrawablePendingManager merged into RequestContext
- change: No longer scales resize by 10% when calculating inSampleSize
- change: precision is LESS_PIXELS must not use BitmapRegionDecoder
- improve: ApkIconBitmapDecoder and AppIconBitmapDecoder now supported bitmapConfig panpf 23 minutes ago
- improve: Improve the decision rule of DrawableDecoder.Factory
- improve: Improved DefaultDrawableDecoder to samplingSizeForRegion()
- new: Added Bitmap.Config.isAndSupportHardware()
Transformation:
- fix: Fixed the bug that if the Bitmap of the transformation result is not new, the current Bitmap is incorrectly reclaimed, causing a crash
- improve: Improve Transformation
Cache:
- fix: Fixed a crash bug when adding an existing cache to LruMemoryCache
- improve: Improve logging for CountBitmap and LruBitmap
- improve: Clear enough space before put
- improve: Improve LruBitmapPool's setInBitmap() and setInBitmapForRegion()
- new: MemoryCache adds exist(String) method
Fetcher:
- rename: FetchResult.from rename to dataFrom
Transition:
- move: TransitionTarget's view property moved to Transition.Factory.create() method
other:
- improve: Added equals and hashCode implementations
- comment: Add code comments
- fix: Fixed the bug that the transformedList of DrawableDecodeResult returned by GifDrawableDrawableDecoder was always null
- fix: Fixed the bug that some pictures could not use the large block picture function
- fix: Fixed a crash bug when the preview image ratio was inconsistent with the original image ratio
- fix: Fixed a bug where GifDrawable would not automatically pause due to the ViewTargetRequestDelegate.start() method incorrectly removing the observation of Lifecycle
- change: Now as long as resizeSize or resizeSizeResolver is set, the default Precision is EXACTLY
- change: RequestManagerUtils merged into SketchUtils
- change: Now DefaultLongImageDecider is split into smallRatioMultiple and bigRatioMultiple
- change: Change SketchConfigurator to SketchFactory
- change: Now key components such as DataSource, BitmapDecoder, DrawableDecoder, Fetcher, HttpStack, RequestInterceptor, StateImage, Transformation, DecodeInterceptor will use Sketch carried by ImageRequest
- change: Now you need to pass Resources when creating SketchBitmapDrawable
- new: Now the ImageRequest will only be executed if the Lifecycle reaches the Started state
- new: Added a series of displayImage overloaded methods for ImageView, such as displayImage(Int), displayImage(Uri), displayImage(File), displayAssetImage(String), etc.
- fix: Fixed a bug where Tiles didn't reset when View size changed
- fix: Fixed a bug that SketchZoomImageView zoomed abnormally when not SketchDrawable
- fix: Fixed a crash bug in Zoomer's rotateTo() method
- fix: Fixed the bug that SketchZoomImageView always intercepts touch events when no Drawable is set, causing ViewPager to fail to slide left and right
- change: ZoomAbility 's zoomScale, baseZoomScale, supportZoomScale, fullZoomScale, fillZoomScale, originZoomScale, minZoomScale, maxZoomScale and doubleClickZoomScales properties renamed to scale, baseScale, supportScale, fullScale, fillScale, originScale, minScale, maxScale and stepScales
- improve: Tiles are now not enabled when the current zoom is less than or equal to the minimum zoom
- improve: Improve Zoomer's code
- improve: ZoomAbility now listens to Lifecycle's ON_START and ON_STOP events instead to pause and resume Tiles
- improve: ZoomAbility will get the lifecycle from the priority ImageRequest
- upgrade: Upgrade to version 1.2.15 of the android-gif-drawable library
- fix: Fixed bug that AnimatedImageDrawable doesn't support scaling via bounds
- fix: Fixed a bug with incorrect transparency when using VectorDrawable as state image
- change: All implementations of DisplayTarget now do not continue to set when the error Drawable is empty
- change: Scale.KEEP_ASPECT_RATIO renamed to SAME_ASPECT_RATIO
- improve: CrossfadeDrawable now reverts to using the maximum size of the start and end Drawable as intrinsic width and height
- improve: ColorResStateImage is merged into ColorStateImage, DrawableResStateImage is merged into DrawableStateImage
- improve: The bg property of IconStateImage now supports Drawable
- improve: Access control for all utility functions is now internal
- improve: LongImageClipPrecisionDecider now uses Sketch.longImageDecider by default to determine long images
- new: ImageRequest and ImageOptions added resizeApplyToDrawable property IconDrawableStateImage and IconDrawableStateImage merged into IconStateImage
- new: Resize's scale property now supports ScaleDecider and provides a LongImageScaleDecider implementation
- new: SketchImageView adds xml attribute
- fix: Fixed a bug where the findSampleSize function might crash
- change: The readMode of SketchZoomImageView is now off by default
- improve: Change DefaultReadModeDecider to LongImageReadModeDecider, and use Sketch.longImageDecider by default to determine long images
- improve: Improved CrossfadePainter
New version, new beginning
- change: maven groupId changed to
io.github.panpf.sketch3
, so version 2.* will not prompt to upgrade - change: Changed the package name to
com.github.panpf.sketch
so it won't conflict with the 2.* version - change: Based on kotlin coroutine rewrite, API and function implementation are all changed, just use a new library
- improve: It is no longer required to use SketchImageView, any ImageView and its subclasses can, combined with custom Target can support any View
- improve: The Zoom function is split into independent modules that can be independently relied on, and the large image sampling function is refactored and multi-threaded decoding is faster.
- improve: The gif module now directly depends on the android-gif-drawable library and no longer needs to be modified twice, and can be upgraded by itself
- new: Added support for SVG
- new: Added support for Jetpack Compose
- new: Support for request and decode interceptors
- new: Refer to coil v2.2.0 version and combine it with the original functions of sketch. Compared
with coil, there are the following differences:
- Sketch supports minimum API 16, while coil only supports API 21 minimum
- Sketch supports bitmap multiplexing, but coil does not
- Sketch supports finer adjustment of image size
- Sketch clearly distinguishes between display, load, and download requests
- Sketch provides a picture zoom display component and supports large picture sampling