private bool CheckMatrixBounds()
{
ImageView imageView = GetImageView();
if (null == imageView) {
return false;
}
RectF rect = GetDisplayRect(GetDrawMatrix());
if (null == rect) {
return false;
}
float height = rect.Height(), width = rect.Width();
float deltaX = 0, deltaY = 0;
int viewHeight = GetImageViewHeight(imageView);
if (height <= viewHeight)
{
if (mScaleType.Name ().Equals (ImageView.ScaleType.FitStart.Name ())) {
deltaY = -rect.Top;
}
else if (ImageView.ScaleType.FitEnd.Equals (mScaleType.Name ())) {
deltaY = viewHeight - height - rect.Top;
}
else{
deltaY = (viewHeight - height) / 2 - rect.Top;
}
}
else if (rect.Top > 0) {
deltaY = -rect.Top;
} else if (rect.Bottom < viewHeight) {
deltaY = viewHeight - rect.Bottom;
}
int viewWidth = GetImageViewWidth(imageView);
if (width <= viewWidth) {
if (mScaleType.Name().Equals(ImageView.ScaleType.FitStart.Name())) {
deltaX = -rect.Left;
}
else if (mScaleType.Name().Equals(ImageView.ScaleType.FitEnd.Name())) {
deltaX = viewWidth - width - rect.Left;
}
else {
deltaX = (viewWidth - width) / 2 - rect.Left;
}
mScrollEdge = EDGE_BOTH;
}
else if (rect.Left > 0) {
mScrollEdge = EDGE_LEFT;
deltaX = -rect.Left;
} else if (rect.Right < viewWidth) {
deltaX = viewWidth - rect.Right;
mScrollEdge = EDGE_RIGHT;
} else {
mScrollEdge = EDGE_NONE;
}
// Finally actually translate the matrix
mSuppMatrix.PostTranslate(deltaX, deltaY);
return true;
}