private void UpdateBaseMatrix(Android.Graphics.Drawables.Drawable d)
{
ImageView imageView = GetImageView ();
if (null == imageView || null == d) {
return;
}
float viewWidth = GetImageViewWidth (imageView);
float viewHeight = GetImageViewHeight (imageView);
int drawableWidth = d.IntrinsicWidth;
int drawableHeight = d.IntrinsicHeight;
mBaseMatrix.Reset ();
float widthScale = viewWidth / drawableWidth;
float heightScale = viewHeight / drawableHeight;
if (mScaleType == Android.Widget.ImageView.ScaleType.Center) {
mBaseMatrix.PostTranslate ((viewWidth - drawableWidth) / 2F,
(viewHeight - drawableHeight) / 2F);
} else if (mScaleType == Android.Widget.ImageView.ScaleType.CenterCrop) {
float scale = Math.Max (widthScale, heightScale);
mBaseMatrix.PostScale (scale, scale);
mBaseMatrix.PostTranslate ((viewWidth - drawableWidth * scale) / 2F,
(viewHeight - drawableHeight * scale) / 2F);
} else if (mScaleType == Android.Widget.ImageView.ScaleType.CenterInside) {
float scale = Math.Min (1.0f, Math.Min (widthScale, heightScale));
mBaseMatrix.PostScale (scale, scale);
mBaseMatrix.PostTranslate ((viewWidth - drawableWidth * scale) / 2F,
(viewHeight - drawableHeight * scale) / 2F);
} else {
RectF mTempSrc = new RectF (0, 0, drawableWidth, drawableHeight);
RectF mTempDst = new RectF (0, 0, viewWidth, viewHeight);
if (mScaleType.Name ().Equals (ImageView.ScaleType.FitCenter.Name ())) {
mBaseMatrix.SetRectToRect (mTempSrc, mTempDst, Matrix.ScaleToFit.Center);
} else if (mScaleType.Name ().Equals (ImageView.ScaleType.FitStart.Name ())) {
mBaseMatrix.SetRectToRect (mTempSrc, mTempDst, Matrix.ScaleToFit.Start);
} else if (mScaleType.Name().Equals (ImageView.ScaleType.FitEnd.Name()))
mBaseMatrix.SetRectToRect (mTempSrc, mTempDst, Matrix.ScaleToFit.End);
else if (mScaleType.Name ().Equals (ImageView.ScaleType.FitXy.Name ()))
mBaseMatrix.SetRectToRect (mTempSrc, mTempDst, Matrix.ScaleToFit.Fill);
}
ResetMatrix ();
}