diff options
author | David Morrissey <davemorrissey@gmail.com> | 2017-11-11 14:23:43 +0000 |
---|---|---|
committer | David Morrissey <davemorrissey@gmail.com> | 2017-11-11 14:23:43 +0000 |
commit | 16ab48121dad69bac0fc900ef8fa3abc8fe44c41 (patch) | |
tree | 1d81a03caf07555ed92ebdafccbbd626f8942ec0 | |
parent | 22fb5e3b36ebdf9c3a1ef963864c61ef82d48de0 (diff) | |
download | subsampling-scale-image-view-16ab48121dad69bac0fc900ef8fa3abc8fe44c41.tar.gz |
#298 Expose remaining pan available. Allows activities and subclasses to determine whether pan limit has been reached in each direction.
-rw-r--r-- | library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java index 8bf9153..e66b8fe 100644 --- a/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java +++ b/library/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java @@ -2336,6 +2336,37 @@ public class SubsamplingScaleImageView extends View { } /** + * Calculate how much further the image can be panned in each direction. The results are set on + * the supplied {@link RectF} and expressed as screen pixels. For example, if the image cannot be + * panned any further towards the left, the value of {@link RectF#left} will be set to 0. + */ + public final void getPanRemaining(RectF vTarget) { + if (!isReady()) { + return; + } + + float scaleWidth = scale * sWidth(); + float scaleHeight = scale * sHeight(); + + if (panLimit == PAN_LIMIT_CENTER) { + vTarget.top = Math.max(0, -(vTranslate.y - (getHeight() / 2))); + vTarget.left = Math.max(0, -(vTranslate.x - (getWidth() / 2))); + vTarget.bottom = Math.max(0, vTranslate.y - ((getHeight() / 2) - scaleHeight)); + vTarget.right = Math.max(0, vTranslate.x - ((getWidth() / 2) - scaleWidth)); + } else if (panLimit == PAN_LIMIT_OUTSIDE) { + vTarget.top = Math.max(0, -(vTranslate.y - getHeight())); + vTarget.left = Math.max(0, -(vTranslate.x - getWidth())); + vTarget.bottom = Math.max(0, vTranslate.y + scaleHeight); + vTarget.right = Math.max(0, vTranslate.x + scaleWidth); + } else { + vTarget.top = Math.max(0, -vTranslate.y); + vTarget.left = Math.max(0, -vTranslate.x); + vTarget.bottom = Math.max(0, (scaleHeight + vTranslate.y) - getHeight()); + vTarget.right = Math.max(0, (scaleWidth + vTranslate.x) - getWidth()); + } + } + + /** * Set the pan limiting style. See static fields. Normally {@link #PAN_LIMIT_INSIDE} is best, for image galleries. */ public final void setPanLimit(int panLimit) { |