Xamarin组件包 Xamarin.ToolKit第二波
Xamarin.ToolKit第二波先来看下效果

一 圆角按钮
xamarin.froms提供的标准button按钮设置了圆角和边框,都没有明显圆角样式,于是乎自己重写了渲染类。道理吧就是重写ButtonRenderer,以下代码是安卓的实现,ios也有实现且非常简单这里就不贴出来了。
public class CustomButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{ var selected = new GradientDrawable();//创建drawable
var selectedColor = new MyGraphic.Color(Element.BackgroundColor.ToAndroid().ToArgb() + );
selected.SetColor(selectedColor);
selected.SetCornerRadius(Element.BorderRadius*);
selected.SetStroke((int)Element.BorderWidth, Element.BorderColor.ToAndroid()); var unSelected = new GradientDrawable();//创建drawable
unSelected.SetColor(Element.BackgroundColor.ToAndroid());
unSelected.SetCornerRadius(Element.BorderRadius * );
unSelected.SetStroke((int)Element.BorderWidth, Element.BorderColor.ToAndroid()); var drawable = new StateListDrawable();
drawable.AddState(new int[] { MyAndroid.Resource.Attribute.StatePressed },
selected);
drawable.AddState(new int[] { -MyAndroid.Resource.Attribute.StatePressed },
unSelected); Control.SetBackgroundDrawable(drawable);
}
}
}
二 带图标的输入框
xamarin.froms提供的标准Entry,在安卓里面显示出来很丑只有一个下边框,且没有什么可定义的样式设置,于是乎自己重写定义一个Entry,让他具有边框,边框颜色,还有一点圆角,也可以设置左边和右边的图标
下面同样是安卓的实现代码
1 IconEntry类
public class IconEntry : Entry
{
#region 静态属性
public static readonly BindableProperty DrawLeftProperty;
public static readonly BindableProperty DrawRightProperty;
public static readonly BindableProperty BorderColorProperty;
#endregion #region 属性 /// <summary>
/// 左边图标文件
/// </summary>
public string DrawLeft
{
get { return this.GetValue(DrawLeftProperty).ToString(); }
set { SetValue(DrawLeftProperty, value); }
} /// <summary>
/// 右边图标文件
/// </summary>
public string DrawRight
{
get { return this.GetValue(DrawRightProperty).ToString(); }
set { SetValue(DrawRightProperty, value); }
} /// <summary>
/// 边框颜色
/// </summary>
public Color BorderColor
{
get { return (Color)GetValue(BorderColorProperty); }
set { SetValue(BorderColorProperty, value); }
} #endregion #region 构造
static IconEntry()
{
DrawLeftProperty = BindableProperty.Create<IconEntry, string>(
p => p.DrawLeft,
string.Empty,
BindingMode.OneWay,
propertyChanged: DrawLeftChangedHandler); DrawRightProperty = BindableProperty.Create<IconEntry, string>(
p => p.DrawRight,
string.Empty,
BindingMode.OneWay,
propertyChanged: DrawRightChangedHandler); BorderColorProperty = BindableProperty.Create<IconEntry, Color>(
p => p.BorderColor,
Color.Transparent,
BindingMode.OneWay,
propertyChanged: BorderColorChangedHandler);
}
#endregion #region 方法 #region DrawLeft变化处理
private static void DrawLeftChangedHandler(BindableObject bindable,
string oldValue, string newValue)
{
if (!oldValue.Equals(newValue))
{
var pageHead = (IconEntry)bindable;
pageHead.DrawLeft = newValue;
}
}
#endregion #region DrawRight变化处理
private static void DrawRightChangedHandler(BindableObject bindable,
string oldValue, string newValue)
{
if (!oldValue.Equals(newValue))
{
var pageHead = (IconEntry)bindable;
pageHead.DrawRight = newValue;
}
}
#endregion #region BorderColor变化处理
private static void BorderColorChangedHandler(BindableObject bindable,
Color oldValue, Color newValue)
{
if (!oldValue.Equals(newValue))
{
var pageHead = (IconEntry)bindable;
pageHead.BorderColor = newValue;
}
}
#endregion #endregion
}
2 IconEntryRenderer类
public class IconEntryRenderer : EntryRenderer
{
private Bitmap LeftBitmap
{
get
{
if (Element is IconEntry)
{
var logEntry = (Element as IconEntry);
if (!string.IsNullOrEmpty(logEntry.DrawLeft))
{
var resStr = logEntry.DrawLeft;
if (resStr.Contains(".png"))
{
resStr = resStr.Replace(".png", "");
}
var id = Context.Resources.GetIdentifier(resStr,
"drawable",
Context.PackageName);
return BitmapFactory.DecodeResource(Resources, id);
}
}
return null;
}
} private Bitmap RightBitmap
{
get
{
if (Element is IconEntry)
{
var logEntry = (Element as IconEntry);
if (!string.IsNullOrEmpty(logEntry.DrawRight))
{
var resStr = logEntry.DrawRight;
if (resStr.Contains(".png"))
{
resStr = resStr.Replace(".png", "");
}
var id = Context.Resources.GetIdentifier(resStr,
"drawable",
Context.PackageName);
return BitmapFactory.DecodeResource(Resources, id);
}
}
return null;
}
} protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{ var unSelected = new GradientDrawable();//创建drawable
unSelected.SetCornerRadius();
unSelected.SetStroke(, (Element as IconEntry).BorderColor.ToAndroid());
unSelected.SetShape(ShapeType.Rectangle); var padLeft = ;
if (LeftBitmap != null)
{
padLeft += LeftBitmap.Width;
} var padRight = ;
if (RightBitmap != null)
{
padRight += RightBitmap.Width;
} Control.SetPadding(padLeft, , padRight, );
Control.SetTextColor(Element.TextColor.ToAndroid());
Control.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
Control.SetBackgroundDrawable(unSelected);
Control.Gravity = GravityFlags.CenterVertical; }
} protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
if (LeftBitmap != null)
{
canvas.DrawBitmap(LeftBitmap, 20f, (Height - LeftBitmap.Height) / 2f, new Paint());
} if (RightBitmap != null)
{
canvas.DrawBitmap(RightBitmap, Width-RightBitmap.Width - 20f, (Height - RightBitmap.Height) / 2f, new Paint());
}
} }
三 同样如有朋友喜欢也可以付费支持下
1)支付宝: 2) 微信:

如果有需要的朋友可发邮件并写明需要的组件和支付流水号:邮件地址 2543856397@qq.com,我将以邮件方式按要求发送相关文件
Xamarin组件包 Xamarin.ToolKit第二波的更多相关文章
- Xamarin组件包 Xamarin.ToolKit
一 简介 Xamarin.ToolKit是个人在使用xamrin.froms开发2年中,因实际项目需要所自定义的组件包.该组件包采用xamarin.froms方式封装,用户可像普通forms控件那样 ...
- linux 下安装开发组件包
最初安装redhat 时, 系统自己装的,只安装了base 包,在开发过程中,需要不停的安装某个需求包, 图省事,安装光盘下的开发组件包: 在安装光盘下,,,用命令: yum grouplist ...
- 如何在Eclipse中查看Android源码或者第三方组件包源码
文章出处:http://blog.csdn.net/cjjky/article/details/6535426 在学习过程中如果经常阅读源码,理解程度会比较深,学习效率也会比较高,那么如何方便快捷的阅 ...
- ABP组件包升级
对于abp的爱好者来说在使用abp上会面临两个问题,第一个是如何上手,第二是如何升级,然而们今天的主题是如何升级abp的组件包.目前我项目版本是0.8.2 通过官网boilerplate生成的项目前端 ...
- 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)
一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...
- Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述
Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述: 可能刚刚接触Xamarin的人来说,对于这个概念比较的模糊,认为这说的不都是同一个东西吗?事实并不是这样的 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
随机推荐
- IOS软件国际化(本地化Localizable)
IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...
- 单纯觉得是篇好文——跨终端Web之Hybrid App
[reference]http://www.infoq.com/cn/articles/hybrid-app#theCommentsSection 编者按:InfoQ开设新栏目“品味书香”,精选技术书 ...
- sql语句:if exists语句使用
') begin print('exists ') end else begin print('no exists ') end go
- Java Spring MVC项目搭建(二)——项目配置
1.站点配置文件web.xml 每一个Spring MVC 项目都必须有一个站点配置文件web.xml,他的主要功能吗....有一位大哥已经整理的很好,我借来了,大家看看: 引用博客地址: http: ...
- 虔诚的墓主人(bzoj 1227)
Description 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己 ...
- Linux 线程调度与优先级设置
转载:http://blog.csdn.net/a_ran/article/details/43759729 线程调度间的上下文切换 什么是上下文切换? 如果主线程是唯一的线程,那么他基本上不会被调度 ...
- AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域.这个框架由一系列的类库组成.主要包括有 ...
- linx建立用戶&組
groupadd test 创建test用户组 useradd user1 创建user1用户 passwd user1 ...
- SpringMVC 前端获得定义JSON对象的方法
SpringMVC 前端获得定义JSON对象的方法: 可以使用map进行对象的创建,这样就会解析成键值对,不需要为前端专门定义对象.
- react-router 学习笔记
前言: 本文为个人学习react-router的总结.包括路由基础配置,跳转,权限管理,组件与路由配置的关系,代码分割.欢迎交流指导. 一.路由基础 1.路由配置 & 显示路由组件的view( ...