Xamarin.Forms学习之位图(二)
上篇文章分享了如何加载网络图片和PCL中的图片,所以今天继续分享关于如何加载平台的内嵌图片,在这之前说一下上篇文章开头的一个问题:为什么不能加载UWP项目,这是因为我升级了UWP的SDK,而Xamarin还没有支持到这个版本(我也不想用Xamarin来发UWP项目)。还有就是园友问怎么知道哪些是平台特殊的API(Platform-specific API和文件操作),自认为呢,当你调用一个API的时候需要引用Xanmarin.IOS和Mono.Android或者说除了.NET的API都算是Platform-specific API,当然这是我个人的理解。
当然,还是一样,有错请及时留言,大家互相分享和进步!
不废话,继续正文,在上文中说到,相同的图片在不同的手机上的显示是有分别的,我想,做过APP开发的应该都知道这个问题,对于未接触过的呢,简单说下(其实我这里表达不是很清楚,在博客园中还有其他的相关的文章专门做详细的介绍,但是我把地址忘了,所以只有你们自己去找找了),就是经常听到的屏幕分辨率和像素要映射(或者叫对应)的原因,比如有的手机分辨率是960*640,480*800等等这些,正是由于这些不同分辨率的存在让图片的显示产生了不同,而图片的像素是不变的,一像素就是一像素,但是这一像素要在屏幕上显示,那么就会产生问题了。像素是位图的尺寸单位,手机屏幕(这里就不再把什么分辨率的东西扯得太远了,简单点就叫个手机屏幕)也有一个单位,英文叫device-independent unit简称就是DIU,所以同样的图片在不同的手机上显示不一样就是DIU和像素之间映射不一致所导致的,现在常见的有(主流貌似都是以苹果来介绍的):
一个单位点(DIU)对应一个像素
一个单位点(DIU)对应两个像素
一个单位点(DIU)对应三个像素
其实呢安卓的设备还包含以下三种:
一个单位点(DIU)对应0.75个像素
一个单位点(DIU)对应1.5个像素
一个单位点(DIU)对应4个像素
所以,如果同样的图片在不同的DIU设备上显示就会出现显示的大小不一致的情况,如上安卓则有六种常见DIU,但是你懂的,谁TMD一天没事光弄图,所以呢也只弄1:1、1:2和1:3的三种图的,就是跟苹果图保持一致,那没有相应比例的图片岂不是显示会出问题?!当然不会,手机系统会自动根据当前的DIU去找到三种中合适的图去进行一定比例的缩放。
现在我们来说说平台图片,在我们Xamrin.Forms项目中的xxx.Driod和xxx.IOS的项目(我的所有Xamarin相关都不会涉及到UWP,UWP我觉得还是用UWP开发吧)中都能看到一个Resources的文件夹,但是查看该文件夹,你就会发现他们并不一样,举个例子,在IOS中有如下名称的图片:
Icon-Small.png
Icon-Small@2x.png
Icon-Small@3x.png
他们名称几乎一样,不一样的是后面两个都是以@2x或者@3x结束,我想看到这里,大家都能联想到了一些东西了,是的这就是为不同的DIU准备的,你们可以在资源管理系统中右键属性查看详细信息就会知道,他们的像素分别是40*40、80*80和120*120.这里也许你会说那项目中如何加载图片哦,为了显示一张图我需要高三个地址,还有安卓的话岂不是最好要弄6个地址去加载一个图片,我疯了,对吧!淡定,刚刚已经说了图片的名称是有规律的,所以你不要去写很多个地址去加载图片,你只需要写@前面的相同的部分就行了,剩下的系统会自己去根据当前的DIU去找相应名称的图片,比如你当前的1DIU对应3个像素,那么当你加载Icon-Small.png图片的时候会自动去加载Icon-Small@3x.png图片。
安卓的Resources跟苹果有些不一样,苹果是把所有的图片放在Resources文件夹中的,通过名称来区分的,但是安卓则是通过文件夹来区分的,展开安卓项目中的Resources文件夹,你自会看到,其他也都相同就不再多说。
现在对平台的Resources和其中包含的图片有了一个简单的了解,现在来调用这里面的图片并显示,这里就需要上一篇文章中所需要的FileImageSource类,示例代码如下:
Image image = new Image
{
Source = new FileImageSource
{
//File = "icon.png"
File = Device.OnPlatform(iOS: "Icon-Small-40.png", Android: "icon.png", WinPhone: "Assets/StoreLogo.png")
},
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand
};
在调用平台图片的时候,电子书中有句话,原文如下:
Almost always, you’ll be using Device.OnPlatform in code or OnPlatform in XAML to specify the three filenames:
意思就是调用平台图片的时候总是需要用到OnPlatform,但其实这里如果IOS和Andriod的图片名称相同的话并且不考虑Windows的平台,可以直接如注释的那般写,是没有问题的。
好了,平台图片和FileImageSource对象的用法,就做个这样的简单分享,过两天和会把Xamarin.Forms中的三种手势做个简单的分享,然后会开始动画!加油!要学的东西好多哦,感觉脑子不够用啊!
最近在linux上部署asp.net core的demo却总是运行不起,我是直接在本地dotnet publish然后上传的,其实也不是运行不起,而是有个警告,并且我已经打开了80和5000端口了,但是我在外界依然不能访问,这个是在阿里云上的一个测试服务器。我贴个图,知道怎么搞定的大神麻烦指点下。

Xamarin.Forms学习之位图(二)的更多相关文章
- Xamarin.Forms学习之位图(一)
在开始我的分享之前呢,让我先问下我的问题: 1.最近更新了Xamarin 4.1.1.3,我想问下版本更新信息在哪里看? 2.更新后我新建的项目没有UWP项目了(虽然没有用过,但是我想确认是4.1.1 ...
- Xamarin.Forms学习系列之Android集成极光推送
一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...
- Xamarin.Forms学习之Platform-specific API和文件操作
这篇文章的分享原由是由于上篇关于Properties的保存不了,调用SavePropertiesAsync()方法也不行,所以我希望通过操作文件的方式保存我的需要的数据,然后我看了一下电子书中的第二十 ...
- Xamarin.Forms学习之Page Navigation(一)
在最初接触Xamarin.Forms的时候,我是跟着Xamarin官方的名为“learning-xamarin-ebook”的pdf文档进行学习的,我在成功运行Hello world程序之后,我开始跟 ...
- Xamarin.Forms学习之XAML命名空间
大家好,我又悄咪咪的来了,在上一篇的Xamarin文章中简单介绍了Xamarin的安装过程,妈蛋没想到很多小朋友很感激我,让他们成功的安装了Xamarin,然后......成功的显示了经典的两个单词( ...
- Xamarin.Forms学习之初
微软的Build 2016结束的有段时间了,对于一个简单的小屌丝程序员--我来说,关注最大的无疑是Xamarin的免费(开源什么的让大神们上吧),内心激动啊.大会结束的周末我就迫不及待的安装了,然后. ...
- Xamarin.Forms学习系列之Syncfusion 制作图形报表
Syncfusion是一家微软生态下的第三方组件/控件供应商,除了用于HTML5和JavaScript的控件外,他们产品还涉及如下领域: WEB ASP.NET MVC ASP.NET WebForm ...
- Xamarin.Forms 学习系列之优秀UI收集
1.各种优秀UI例子 https://github.com/jsuarezruiz/xamarin-forms-goodlooking-UI 输入框例子 https://github.com/enis ...
- Xamarin.Forms学习系列之SQLite
在App中我们通常不会实时获取服务器数据,会在用户手机中保存历史数据,这个时候就需要用到数据库SQLite,由于微软的封装,在Xamarin中操作SQLite非常简单,类似EF的操作. 1.我们需要在 ...
随机推荐
- 【Python3 爬虫】04_urllib.request.urlretrieve
urllib模块提供的urlretrieve()函数,urlretrieve()方法直接将远程的数据下载到本地 urllib语法 参数url:传入的网址,网址必须得是个字符串 参数filename:指 ...
- Visual studio C++ MFC之点击按钮(菜单栏)生成新窗口
背景 当前做的APP有菜单栏,菜单栏有一项需要对下位机相关参数进行设置,则必须弹出一个窗口来实现设置操作.本篇即对点击菜单栏生成新的窗口,在新的窗口内完成相应计划后结束新窗口并返回原窗口的方法进行简述 ...
- C语言-Makefile经典教程(掌握这些足够)
makefile很重要 什么是makefile? 或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional 的 ...
- (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)
给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...
- Linux管理员必须知道的sudo命令
"Sudo"是Unix/Linux平台上的一个很实用的工具,它同意系统管理员分配给普通用户一些合理的"权利",让他们执行一些仅仅有超级用户或其它 特许用户才干完 ...
- JS鼠标的拖拽原理
拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的.下面讲解一下拖拽的原理,希望可以帮助到有需要的朋友! 一.拖拽的流程动作①鼠标按下②鼠标移动③鼠标松开 ...
- 如何实现uboot和linux之间的参数传递
参考http://cgxcn.blog.163.com/blog/static/132312422009101133251202/ 参考:http://blog.chinaunix.net/uid-1 ...
- 手游后台PVP系统网络同步方案总结
游戏程序 平台类型: 程序设计: 编程语言: 引擎/SDK: 概述 PVP系统俨然成为现在新手游的上线标配,手游Pvp系统体验是否优秀,很大程度上决定了游戏的品质.从最近半年上线的新手 ...
- poj1273 Drainage Ditches Dinic最大流
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76000 Accepted: 2953 ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的alsa音频pcm g711 和aac 音频格式
(1)alsa pcm (2)g711 (3)aac (4) --------------author:pkf -------------------time:2-4 ---------------- ...