/// <summary> /// Sets the image source. /// </summary> /// <param name="targetButton">The target button.</param> /// <param name="model">The model.</param> /// <returns>A <see cref="Task"/> for the awaited operation.</returns> private void SetImageSource(Android.Widget.Button targetButton, ImageButton model) { if (targetButton == null || targetButton.Handle == IntPtr.Zero || model == null) { return; } var source = model.IsEnabled ? model.Source : model.DisabledSource ?? model.Source; var drawable = Context.GetDrawable((source as FileImageSource).File);//new BitmapDrawable(bitmap); if (drawable == null) { targetButton.SetCompoundDrawables(null, null, null, null); } else { var tintColor = model.IsEnabled ? model.ImageTintColor : model.DisabledImageTintColor; if (tintColor != Color.Transparent) { drawable.SetTint(tintColor.ToAndroid()); drawable.SetTintMode(PorterDuff.Mode.SrcIn); } using (var scaledDrawable = GetScaleDrawable(drawable, model.ImageWidthRequest, model.ImageHeightRequest)) { Drawable left = null; Drawable right = null; Drawable top = null; Drawable bottom = null; switch (model.Orientation) { case ImageOrientation.ImageToLeft: targetButton.Gravity = GravityFlags.Left | GravityFlags.CenterVertical; left = scaledDrawable; break; case ImageOrientation.ImageToRight: targetButton.Gravity = GravityFlags.Right | GravityFlags.CenterVertical; right = scaledDrawable; break; case ImageOrientation.ImageOnTop: targetButton.Gravity = GravityFlags.Top | GravityFlags.CenterHorizontal; top = scaledDrawable; break; case ImageOrientation.ImageOnBottom: targetButton.Gravity = GravityFlags.Bottom | GravityFlags.CenterHorizontal; bottom = scaledDrawable; break; case ImageOrientation.ImageCenterToLeft: targetButton.Gravity = GravityFlags.CenterHorizontal | GravityFlags.CenterVertical; left = scaledDrawable; break; case ImageOrientation.ImageCenterToRight: targetButton.Gravity = GravityFlags.CenterHorizontal | GravityFlags.CenterVertical; right = scaledDrawable; break; } var width = scaledDrawable.Bounds.Width(); var height = scaledDrawable.Bounds.Height(); targetButton.CompoundDrawablePadding = (int)Context.ToPixels(10); targetButton.SetMinimumWidth(width + Control.PaddingLeft + Control.PaddingRight); targetButton.SetMinimumHeight(height + Control.PaddingTop + Control.PaddingBottom); targetButton.SetCompoundDrawables(left, top, right, bottom); } } }