/******************************************************************************* * Copyright 2011, 2012 Chris Banes. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.tiger.quicknews.wedget.photoview; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.RectF; import android.view.GestureDetector; import android.view.View; import android.widget.ImageView; public interface IPhotoView { public static final float DEFAULT_MAX_SCALE = 3.0f; public static final float DEFAULT_MID_SCALE = 1.75f; public static final float DEFAULT_MIN_SCALE = 1.0f; public static final int DEFAULT_ZOOM_DURATION = 200; /** * Returns true if the PhotoView is set to allow zooming of Photos. * * @return true if the PhotoView allows zooming. */ boolean canZoom(); /** * Gets the Display Rectangle of the currently displayed Drawable. The * Rectangle is relative to this View and includes all scaling and * translations. * * @return - RectF of Displayed Drawable */ RectF getDisplayRect(); /** * Sets the Display Matrix of the currently displayed Drawable. The * Rectangle is considered relative to this View and includes all scaling * and translations. * * @param finalMatrix target matrix to set PhotoView to * @return - true if rectangle was applied successfully */ boolean setDisplayMatrix(Matrix finalMatrix); /** * Gets the Display Matrix of the currently displayed Drawable. The * Rectangle is considered relative to this View and includes all scaling * and translations. * * @return - true if rectangle was applied successfully */ Matrix getDisplayMatrix(); /** * Use {@link #getMinimumScale()} instead, this will be removed in future * release * * @return The current minimum scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ @Deprecated float getMinScale(); /** * @return The current minimum scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ float getMinimumScale(); /** * Use {@link #getMediumScale()} instead, this will be removed in future * release * * @return The current middle scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ @Deprecated float getMidScale(); /** * @return The current medium scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ float getMediumScale(); /** * Use {@link #getMaximumScale()} instead, this will be removed in future * release * * @return The current maximum scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ @Deprecated float getMaxScale(); /** * @return The current maximum scale level. What this value represents * depends on the current {@link android.widget.ImageView.ScaleType} * . */ float getMaximumScale(); /** * Returns the current scale value * * @return float - current scale value */ float getScale(); /** * Return the current scale type in use by the ImageView. * * @return current ImageView.ScaleType */ ImageView.ScaleType getScaleType(); /** * Whether to allow the ImageView's parent to intercept the touch event when * the photo is scroll to it's horizontal edge. * * @param allow whether to allow intercepting by parent element or not */ void setAllowParentInterceptOnEdge(boolean allow); /** * Use {@link #setMinimumScale(float minimumScale)} instead, this will be * removed in future release * <p> *   * </p> * Sets the minimum scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * * @param minScale minimum allowed scale */ @Deprecated void setMinScale(float minScale); /** * Sets the minimum scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * * @param minimumScale minimum allowed scale */ void setMinimumScale(float minimumScale); /** * Use {@link #setMediumScale(float mediumScale)} instead, this will be * removed in future release * <p> *   * </p> * Sets the middle scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * * @param midScale medium scale preset */ @Deprecated void setMidScale(float midScale); /* * Sets the medium scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * @param mediumScale medium scale preset */ void setMediumScale(float mediumScale); /** * Use {@link #setMaximumScale(float maximumScale)} instead, this will be * removed in future release * <p> *   * </p> * Sets the maximum scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * * @param maxScale maximum allowed scale preset */ @Deprecated void setMaxScale(float maxScale); /** * Sets the maximum scale level. What this value represents depends on the * current {@link android.widget.ImageView.ScaleType}. * * @param maximumScale maximum allowed scale preset */ void setMaximumScale(float maximumScale); /** * Register a callback to be invoked when the Photo displayed by this view * is long-pressed. * * @param listener - Listener to be registered. */ void setOnLongClickListener(View.OnLongClickListener listener); /** * Register a callback to be invoked when the Matrix has changed for this * View. An example would be the user panning or scaling the Photo. * * @param listener - Listener to be registered. */ void setOnMatrixChangeListener(PhotoViewAttacher.OnMatrixChangedListener listener); /** * Register a callback to be invoked when the Photo displayed by this View * is tapped with a single tap. * * @param listener - Listener to be registered. */ void setOnPhotoTapListener(PhotoViewAttacher.OnPhotoTapListener listener); /** * Returns a listener to be invoked when the Photo displayed by this View is * tapped with a single tap. * * @return PhotoViewAttacher.OnPhotoTapListener currently set, may be null */ PhotoViewAttacher.OnPhotoTapListener getOnPhotoTapListener(); /** * Register a callback to be invoked when the View is tapped with a single * tap. * * @param listener - Listener to be registered. */ void setOnViewTapListener(PhotoViewAttacher.OnViewTapListener listener); /** * Enables rotation via PhotoView internal functions. * * @param rotationDegree - Degree to rotate PhotoView to, should be in range * 0 to 360 */ void setRotationTo(float rotationDegree); /** * Enables rotation via PhotoView internal functions. * * @param rotationDegree - Degree to rotate PhotoView by, should be in range * 0 to 360 */ void setRotationBy(float rotationDegree); /** * Returns a callback listener to be invoked when the View is tapped with a * single tap. * * @return PhotoViewAttacher.OnViewTapListener currently set, may be null */ PhotoViewAttacher.OnViewTapListener getOnViewTapListener(); /** * Changes the current scale to the specified value. * * @param scale - Value to scale to */ void setScale(float scale); /** * Changes the current scale to the specified value. * * @param scale - Value to scale to * @param animate - Whether to animate the scale */ void setScale(float scale, boolean animate); /** * Changes the current scale to the specified value, around the given focal * point. * * @param scale - Value to scale to * @param focalX - X Focus Point * @param focalY - Y Focus Point * @param animate - Whether to animate the scale */ void setScale(float scale, float focalX, float focalY, boolean animate); /** * Controls how the image should be resized or moved to match the size of * the ImageView. Any scaling or panning will happen within the confines of * this {@link android.widget.ImageView.ScaleType}. * * @param scaleType - The desired scaling mode. */ void setScaleType(ImageView.ScaleType scaleType); /** * Allows you to enable/disable the zoom functionality on the ImageView. * When disable the ImageView reverts to using the FIT_CENTER matrix. * * @param zoomable - Whether the zoom functionality is enabled. */ void setZoomable(boolean zoomable); /** * Enables rotation via PhotoView internal functions. Name is chosen so it * won't collide with View.setRotation(float) in API since 11 * * @param rotationDegree - Degree to rotate PhotoView to, should be in range * 0 to 360 * @deprecated use {@link #setRotationTo(float)} */ @Deprecated void setPhotoViewRotation(float rotationDegree); /** * Extracts currently visible area to Bitmap object, if there is no image * loaded yet or the ImageView is already destroyed, returns {@code null} * * @return currently visible area as bitmap or null */ Bitmap getVisibleRectangleBitmap(); /** * Allows to change zoom transition speed, default value is 200 * (PhotoViewAttacher.DEFAULT_ZOOM_DURATION). Will default to 200 if * provided negative value * * @param milliseconds duration of zoom interpolation */ void setZoomTransitionDuration(int milliseconds); /** * Will return instance of IPhotoView (eg. PhotoViewAttacher), can be used * to provide better integration * * @return IPhotoView implementation instance if available, null if not */ IPhotoView getIPhotoViewImplementation(); /** * Sets custom double tap listener, to intercept default given functions. To * reset behavior to default, you can just pass in "null" or public field of * PhotoViewAttacher.defaultOnDoubleTapListener * * @param newOnDoubleTapListener custom OnDoubleTapListener to be set on * ImageView */ public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener); }