davemorrissey/subsampling-scale-image-view
 Watch   
 Star   
 Fork   
2018-03-15 14:49:29
subsampling-scale-image-view

Improved Kotlin support

This release contains breaking changes for Kotlin apps.

Nullable and NonNull annotations have been added. Kotlin did not recognise some method returns as nullable, so uses of these methods without a null check will no longer compile.

  • Target SDK 27
  • #403 Nullable and NonNull annotations
  • #402 Upload sources and javadoc to Maven
2017-12-02 16:47:05
subsampling-scale-image-view

Performance improvements

This release contains breaking changes. If you use a custom ImageRegionDecoder, changes may be required to make it thread safe. For full details see the migration guide.

These changes are discussed on #120.

  • Replaced setParallelLoadingEnabled with an option to supply a custom executor - setExecutor(Executor).
  • Made AsyncTask.THREAD_POOL_EXECUTOR the default, to reduce contention with other background tasks.
  • Removed synchronization of ImageRegionDecoder.decodeRegion calls to allow for parallel decoding by decoders that support it.
  • Tiles are now loaded during gestures and animations instead of waiting until they end. This can be disabled with setEagerLoadingEnabled(false)
  • Added experimental class SkiaPooledImageRegionDecoder which maintains a small pool of BitmapRegionDecoder instances to allow for parallel decoding when combined with a multi-threaded executor.
2017-11-16 20:58:43
subsampling-scale-image-view

Capped image quality, remaining pan, visible source area, SCALE_TYPE_START

  • Breaking change Minimum supported SDK has changed from 10 to 14. This was required to add the new EXIF support library.
  • Default behaviour change Image quality is now capped at 320dpi (approximately retina quality) instead of matching the screen's density, which results in high memory use and poor performance when displaying large images on very high density screens. The difference in quality is usually unnoticeable, especially with photos. Use setMinimumTileDpi(int) to override the default.
  • #273 #295 Added minimum scale type SCALE_TYPE_START. This displays the image filling the view width and height, and scrolled to the top left.
  • #284 Double tap is now always interpreted as zoom when zoomed out, to avoid problems when minimum and maximum scale are very close.
  • #298 Added getPanRemaining(RectF), which exposes the pan remaining in each direction, in screen pixels.
  • #329 Allow OnClickListener to work before the image has loaded.
  • #331 Added methods to convert view coordinates to source file coordinates to enable the visible area to be extracted from the source image. visibleFileRect(Rect) and viewToFileRect(Rect, Rect).
  • #344 Guard against null vFocusStart in animation.
  • Improved debug overlay.
2017-10-30 21:01:26
subsampling-scale-image-view

Restored build changes

Fixed gradle release script to deploy correct artifacts and returned to more recent build tool versions.

2017-10-26 04:14:49
subsampling-scale-image-view

Reverted build changes

Release 3.7.0 caused (unreproduced) problems for some developers, due to unexplained population of the AttributeSet constructor argument with unexpected values. This release reverts the changes to build tools - an attempt at a blind fix.

2017-10-20 15:06:09
subsampling-scale-image-view

Configurable bitmap type, minor fixes

  • Forced removal of implicit permissions READ_PHONE_STATE, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
  • #279 Include proguard rules to stop removal of default constructors
  • #302 Pass vertical move touch events to parent if not consumed
  • #314 Added null-check per method in onStateChangedListener
  • #349 Support for other bitmap formats (not just default RGB565)
2016-11-06 02:47:38
subsampling-scale-image-view

Improved zoom animation, configurable tile dimensions, pan and zoom listener, off-screen loading support

  • #127 If max tile dimensions have been set and dimensions are known, load base layer without waiting for onDraw. This improves ViewPager support - the next image can be eagerly loaded.
  • #148 Revised behaviour of zoom gestures as the image fills the screen for a smoother animation.
  • #171 Added a new image state listener class to allow activites to receive pan and zoom change events.
  • #206 Allow maximum tile dimensions to be set, so performance and memory usage can be optimised when the device supports excessively large tiles.
  • #211 Made double tap tolerance density aware for improved high density screen support.
  • #216 Ensure cursors are closed after exceptions.
  • #222 Added image event for preview released so it can be recycled.
  • #245 Avoid NPE if view has been detached from parent.
  • #253 Corrected position of tile background colour for preview image.
  • #262 Method to check whether an image has been set.
2016-04-03 18:12:42
subsampling-scale-image-view

Double tap zoom duration, animation listener, report OOMEs

  • #131 Close input stream used by content resolver
  • #133 Implemented animation event listener
  • #176 Catch and wrap OutOfMemoryErrors thrown when decoding bitmaps so listeners can be notified
  • #194 Configurable double tap zoom duration
2015-10-14 03:52:06
subsampling-scale-image-view

Bug fixes

  • #129 #126 Fixed EXIF rotation for single bitmaps
  • #128 Close InputStream in bitmap decoder
  • #130 Fixed call to onImageLoaded for single bitmaps
2015-10-04 05:50:17
subsampling-scale-image-view

Use BitmapDecoder when possible

BitmapRegionDecoder has known issues decoding some images, particularly JPEGs, which can result in images being decoded highly pixellated, grayscale, or completely garbled. BitmapFactory is unaffected by any of these bugs so is much more reliable.

This library will now use BitmapRegionDecoder to decode the bounds of the image, and if it is smaller than the canvas maximum bitmap size, and the whole image is required at native resolution, BitmapFactory is automatically used instead. This should make the display of small to medium size images from unknown sources much more reliable. As screen densities continue to increase, BitmapFactory will be used more frequently.

Users on devices with low resolution screens viewing large images are more likely to see the problems caused by BitmapRegionDecoder.