Skip to content

Instantly share code, notes, and snippets.

@davidtavarez
Created May 4, 2016 14:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidtavarez/8d889e22f430720f72d44199f99ed670 to your computer and use it in GitHub Desktop.
Save davidtavarez/8d889e22f430720f72d44199f99ed670 to your computer and use it in GitHub Desktop.
ImageButton for Xamarin.Forms (iOS & Android)
using System;
using Xamarin.Forms;
namespace NAMESPACE.Controls
{
public class ImageButton : Button
{
}
}
using System;
using Xamarin.Forms;
using NAMESPACE.Droid;
using Xamarin.Forms.Platform.Android;
using Android.Graphics;
[assembly: ExportRenderer (typeof(NAMESPACE.Controls.ImageButton), typeof(ImageButtonRenderer))]
namespace NAMESPACE.Droid
{
public class ImageButtonRenderer : ButtonRenderer
{
protected override void OnLayout (bool changed, int l, int t, int r, int b)
{
base.OnLayout (changed, l, t, r, b);
if (changed) {
var drawables = Control.GetCompoundDrawables ();
if (drawables [0] != null) {
Rect drawableBounds = new Rect ();
drawables [0].CopyBounds (drawableBounds);
int leftOffset = ((Control.Width - Control.PaddingLeft - Control.PaddingRight) - drawableBounds.Width ()) / 2;
drawableBounds.Offset (leftOffset, 0);
drawables [0].SetBounds (drawableBounds.Left, drawableBounds.Top, drawableBounds.Right, drawableBounds.Bottom);
}
}
}
}
}
using System;
using Xamarin.Forms;
using NAMESPACE.iOS;
using Xamarin.Forms.Platform.iOS;
using UIKit;
[assembly: ExportRenderer (typeof(NAMESPACE.Controls.ImageButton), typeof(ImageButtonRenderer))]
namespace NAMESPACE.iOS
{
public class ImageButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged (ElementChangedEventArgs<Button> e)
{
base.OnElementChanged (e);
if (Control != null) {
var imgSize = Control.ImageView.Frame.Size;
var ctrlSize = Control.Frame.Size;
var offSet = ((ctrlSize.Width - imgSize.Width) / 2);
Control.ImageEdgeInsets = new UIEdgeInsets (Control.ImageEdgeInsets.Top, offSet, Control.ImageEdgeInsets.Bottom, offSet);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment