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)含 ...
随机推荐
- JQuery checkbox全选多次点击后无效解决方法
1. jquery设置checkbox时: <input type="checkbox" id="ckAll"/> $(function(){ va ...
- Intel X710网卡VxLAN offload 性能测试
Intel X710网卡VxLAN offload性能测试 1. 测试环境参数: 交换机:盛科E580 服务器: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz ...
- EclipseEE导入项目出现的那些问题
1.显示.project文件丢失, 解决方法:在eclipse中删除和该项目相同的文件名,重新import即可 2.导入没有.classpath和.project文件的项目 解决方法:目前没遇到 3. ...
- angularjs---服务(service / factory / provider)
初angularJs时 常写一些不够优雅的代码 !我总结了一下看看各位有没有中枪的!-----( 这里只针对服务service及其相关! ) 以下做法不太优雅 兄弟controller 之间的相同 ...
- Java 之 Servlet介绍(Java之负基础实战)
1.介绍 Servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了 ...
- 设置与菜单项关联的Activity
有些时候,应用程序需要单击某个菜单项时启动其他Activity(包括其他Service).对于这种需求,Android设置不需要开发者编写任何事件处理代码,只要调用MenuItem的setIntent ...
- datatable 使用详细说明
要注意的是,要被dataTable处理的table对象,必须有thead与tbody,而且,结构要规整(数据不一定要完整),这样才能正确处理.以下是在进行dataTable绑定处理时候可以附加的参数: ...
- Linux安装配置VPN服务器
一.实验简介 VPN ,中文翻译为虚拟专有网络,英文全称是 Virtual Private Network .现在 VPN 被普遍定义为通过 一个公用互联网络建立一个临时的.安全的连接,是一条穿过混乱 ...
- Java策略模式(Strategy模式) 之体验
<JAVA与模式>之策略模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法 ...
- Canvas文本绘制
文字绘制: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...