/*
* This file provided by Facebook is for non-commercial testing and evaluation
* purposes only. Facebook reserves all rights not expressly granted.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.facebook.samples.zoomable;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.view.MotionEvent;
/**
* Interface for implementing a controller that works with {@link ZoomableDraweeView}
* to control the zoom.
*/
public interface ZoomableController {
/**
* Listener interface.
*/
interface Listener {
/**
* Notifies the view that the transform changed.
*
* @param transform the new matrix
*/
void onTransformChanged(Matrix transform);
}
/**
* Enables the controller. The controller is enabled when the image has been loaded.
*
* @param enabled whether to enable the controller
*/
void setEnabled(boolean enabled);
/**
* Gets whether the controller is enabled. This should return the last value passed to
* {@link #setEnabled}.
*
* @return whether the controller is enabled.
*/
boolean isEnabled();
/**
* Sets the listener for the controller to call back when the matrix changes.
*
* @param listener the listener
*/
void setListener(Listener listener);
/**
* Gets the current scale factor. A convenience method for calculating the scale from the
* transform.
*
* @return the current scale factor
*/
float getScaleFactor();
/**
* Returns true if the zoomable transform is identity matrix, and the controller is idle.
*/
boolean isIdentity();
/**
* Returns true if the transform was corrected during the last update.
*
* This mainly happens when a gesture would cause the image to get out of limits and the
* transform gets corrected in order to prevent that.
*/
boolean wasTransformCorrected();
/**
* See {@link android.support.v4.view.ScrollingView}.
*/
int computeHorizontalScrollRange();
int computeHorizontalScrollOffset();
int computeHorizontalScrollExtent();
int computeVerticalScrollRange();
int computeVerticalScrollOffset();
int computeVerticalScrollExtent();
/**
* Gets the current transform.
*
* @return the transform
*/
Matrix getTransform();
/**
* Sets the bounds of the image post transform prior to application of the zoomable
* transformation.
*
* @param imageBounds the bounds of the image
*/
void setImageBounds(RectF imageBounds);
/**
* Sets the bounds of the view.
*
* @param viewBounds the bounds of the view
*/
void setViewBounds(RectF viewBounds);
/**
* Allows the controller to handle a touch event.
*
* @param event the touch event
* @return whether the controller handled the event
*/
boolean onTouchEvent(MotionEvent event);
}