//原来写在其他博客上的东西,搬迁
预备知识:
  • 要明确的三个概念
    • 设计分辨率:在编辑器上开发UI使用的分辨率。我们所有的UI都是在这个分辨率下设计制作的。
    • 显示区域分辨率:设备上所显示的UI区域在编辑器中的分辨率。
    • 屏幕分辨率:设备实际的分辨率。
  • 已知设计分辨率,屏幕分辨率,区域分辨率的计算方法
    • 设置变量
      • 设计分辨率 ContentWidth * ContentHeight,以下简写为 CW * CH
      • 屏幕分辨率 width * height,以下简写 W * H
      • 区域分辨率 TargetWidth * TargetHeight,以下简写 TW * TH (这两个是未知量)
      • 所求区域分辨率用 Target 表示
    • 求解
      • 模式一:保持各个UI在屏幕中所占的百分比(保持宽高比)

不留黑边

留黑边

CW / CH < W / H

CW / TH = W / H

Target = CW * TH

TW / CH = W / H

Target = TW * CH

CW / CH > W / H

TW / CH = W / H

Target = TW * CH

CW / TH = W / H

Target = CW * TH

黄色的公式:以宽度为基准自适应 (所用公式记为:公式一)

绿色的公式:以高度为基准自适应 (所用公式记为:公式二)

  • 模式二:保持各个UI的像素大小不变(保持宽高比)
Target = W * H
  • 模式三:保证UI元素在单方向上的比例不变,即自由拉伸(保持宽高比)
Target = CW * CH(此时 CW 和 CH 是随着屏幕分辨率变化的)

UIRoot

  • Flexible 即,上文所说的模式二。但有个地方要额外注意下:
    • 这种模式下有两个参数,MinHeight 和 MaxHeight。
    • 当屏幕分辨率在 MinHeight 和 MaxHeight 之间时,此时按照模式二正常显示;
    • 当屏幕分辨率小于 MinHeight 或者大于 MaxHeight 时,会对整体UI进行缩放,缩放比例为(H / MinHeight) 或者(H / MaxHeight)
  • Constrained 即, 上文所说的模式一。
    • 这种模式下有四个参数,ContentWidth 与 ContentHeight 以及对应的 Fit
    • ContentWidth 与 ContentHeight 填我们的设计分辨率
    • Fit 有四种选择模式,不同的模式有不同的自适应方案。为了便于理解,从NGUI网站上找到了一张示意图&自己总结了一下计算所需的公式:

  

Fit Width

No

Yes

No

Yes

Fit Height

No

No

Yes

Yes

显示&对应计算公式

保证设备不显示黑边

保证左右无黑边

(公式一)

保证上下无黑边

(公式二)

保证设计分辨率内所有UI全部显示

    • 额外的计算:计算某个UI(比如图片)在设备上的分辨率
      • 图片分辨率大小 PW * PH
      • 图片在设备上显示的分辨率大小 TPW * TPH(未知量)
      • 计算:需要一个方程组
        • (PW * PH) / (TW * TH) = (TPW * TPH) / (W * H)
        • PW / PH = TPW / TPH

NGUI之UIRoot——屏幕的自适应分辨率的计算的更多相关文章

  1. NGUI之UIRoot屏幕分辨率自适应

    NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以一个UIRoot为UI游戏对象树的根的,那么这个UIRoot是起什么作用的呢? 先简单看一下UIRoot中的基本属性 U ...

  2. Unity3D开发(一):NGUI之UIRoot屏幕分辨率自适应

    原地址:http://blog.csdn.net/onerain88/article/details/11713299 NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以 ...

  3. iosiPhone屏幕尺寸、分辨率及适配

    iosiPhone屏幕尺寸.分辨率及适配     1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Fac ...

  4. iPhone屏幕尺寸、分辨率及适配

    转:http://blog.csdn.net/phunxm/article/details/42174937 目录(?)[+]   1.iPhone尺寸规格 设备 iPhone 宽 Width 高 H ...

  5. 【转】iPhone屏幕尺寸、分辨率及适配

    原文网址:http://blog.csdn.net/phunxm/article/details/42174937 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角 ...

  6. iPhone手机的屏幕尺寸、分辨率及适配

    1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...

  7. CSS 屏幕大小自适应

    要想实现css屏幕大小自适应,首先得引入 CSS3 @media 媒体查询器: media的使用和规则: ①被链接文档将显示在什么设备上. ②用于为不同的媒介类型规定不同的样式. 语法:  @medi ...

  8. android webview使用心得 屏幕宽度自适应

    webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomControls(false); //隐藏webview缩放按钮 让Webview加载的页面居中显示有我知道的 ...

  9. WinForm窗体自适应分辨率

    我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可.因 ...

随机推荐

  1. PHP中explode和implode的区别

    字符串的连接与分割是非常重要的两个内容,通过其可以将数组按照指定的规则转换成字符串,也可以将字符串按照指定的规则进行分割,返回一个数组.其应用范围很广,如在购物网站的购物车,在线投票系统等.这两项技术 ...

  2. 矢量图绘制工具Svg-edit调整画布的大小

    矢量图绘制工具Svg-edit调整画布的大小 ------------------------------ ------------------------

  3. ES6箭头函数与展开运算符

    箭头函数:省去了关键字function和return: eg: reduce=(a,b)=>a+b;//返回a+b的值 redduce=(a,b)=>{console.log(a);con ...

  4. PHP基础之PDO

    简介 PDO(PHP Data Object)是指PHP数据对象,它定义了一个轻量级的一致接口来统一操作各种数据库.PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方 ...

  5. 12月4日PHPCMS模板

    cms的样式有很多种,我们学习的是phpcms,这些cms都是大同小异,学会了一种就可以使用其它的cms. PHPCMS是一款网站管理软件.该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性 ...

  6. nginx_https

    nginx使用ssl模块配置HTTPS支持   默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引 ...

  7. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    文章主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用. 简介: handler method 参数绑定常用的注解,我们根据他们处理的Request ...

  8. 【Win10】SplitView控件

    SplitView是Win10中的新控件. 用于呈现两部分视图. 一个视图是主要内容,另一个视图是用于导航.(也就是通常说的汉堡菜单.) 主要结构: <SplitView> <Spl ...

  9. logging 文件日志

    1. 例子 import logging logging.basicConfig(filename='log.txt', #文件名 level=logging.DEBUG, #级别 format=u' ...

  10. express-session使用理解

    本篇主要段落翻译来自https://github.com/expressjs/session 客户端与服务会使用一个Sessionid的Cookie值来进行客户端和服务器端会话的匹配,这个Cookie ...