示例#1
0
        /// <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);
                }
            }
        }