public void animateTo(float left,float top,float right,float bottom,AnimationCallback animationCallback){
  CenterCropTranslator translator=CenterCropTranslator.get(tilesView,sourceWidth,sourceHeight);
  float targetContentWidth=(right - left) * translator.initialContentScale;
  float targetContentHeight=(bottom - top) * translator.initialContentScale;
  float maxScaleX=tilesView.getContentWidth() / targetContentWidth;
  float maxScaleY=tilesView.getContentHeight() / targetContentHeight;
  float scale=Math.min(maxScaleX,maxScaleY);
  int zoomLevel=(int)(scale < 1 ? scale + 10 : Math.log(scale * 10 - 10) / Math.log(2) + 10);
  if (zoomLevel < tilesView.getMinZoomLevel()) {
    zoomLevel=tilesView.getMinZoomLevel();
  }
  if (zoomLevel > tilesView.getZoomLevel()) {
    zoomLevel=tilesView.getZoomLevel();
  }
  animateTo((left + right) / 2f,(top + bottom) / 2f,zoomLevel,animationCallback);
}

public void animateTo ( float left , float top , float right , float bottom , AnimationCallback animationCallback ) { CenterCropTranslator translator = CenterCropTranslator . get ( tilesView , sourceWidth , sourceHeight ) ; float targetContentWidth = ( right - left ) * translator . initialContentScale ; float targetContentHeight = ( bottom - top ) * translator . initialContentScale ; float maxScaleX = tilesView . getContentWidth ( ) / targetContentWidth ; float maxScaleY = tilesView . getContentHeight ( ) / targetContentHeight ; float scale = Math . min ( maxScaleX , maxScaleY ) ; int zoomLevel = ( int ) ( scale < 1 ? scale + 10 : Math . log ( scale * 10 - 10 ) / Math . log ( 2 ) + 10 ) ; if ( zoomLevel < tilesView . getMinZoomLevel ( ) ) { zoomLevel = tilesView . getMinZoomLevel ( ) ; } if ( zoomLevel > tilesView . getZoomLevel ( ) ) { zoomLevel = tilesView . getZoomLevel ( ) ; } animateTo ( ( left + right ) / 2f , ( top + bottom ) / 2f , zoomLevel , animationCallback ) ; }
animate to a position and zoom that contains the specified bounds .
