作者fallenangels (金)
看板AndroidDev
标题Re: [问题] ui图片大小如何计算?
时间Fri Aug 16 00:13:54 2013
※ 引述《a2975313 (GN)》之铭言:
: 最近在开发这款硬体的app
: http://www.asus.com/tw/Tablets_Mobile/ASUS_Transformer_Pad_Infinity_TF700T/#specifications
: 几个问题想向大家求教:
: 1. 硬体说明写到1920*1200单位是指px吗?
: 2. 请问我的图片要放在哪种drawable里面?
: 3. 如果我要制作一张跟萤幕大小一样的底图,请问宽高要怎麽计算出来?
: 4. google有一提供一个公式 px=dp*(dpi/160),老实说我完全看不懂要怎麽用,是否有更白话的翻译?
1. 是 px.
2. 有 drawable四个资料夹分别是: ldpi, mdpi, hdpi, xhdpi每个都要放.
dpi是 「dots per inch」缩写即每一英寸的萤幕有多少个点, 我举个例子:
通常低阶手机萤幕不会太好, 每一英寸内的点会较少, 显示图片时会有颗粒感;
反之, 高阶手机萤幕每英寸内点较多, 图片看起来就较细致.
原 PO在制作图片时, 同一张图片要制作成四个比例(0.75 : 1 : 1.5 : 2),
然後放入 0.5比例的放入 ldpi, 1比例的放入 mdpi, 依此类推...
作业系统执行你的 app时, 会自行判断设备的 dpi值, 然後到对应的资料夹内取图片.
对了, 如果你不想花太多时间可以只放一份在 mdpi就好, 若使用者设备是 xhdpi
系统会拿 mdpi里面的图片来缩放, 想当然耳可能会出现锯齿状比较不好看.
3. 举凡可视化元件都是继承自 View类别, View类别中的
onSizeChanged (int w, int h, int oldw, int oldh)方法的 w和 h参数就是
当前底图的宽与高.
所以针对你要取得底图的元件继承它, 然後覆写上述的方法就能取得你要的东西.
4. 续第二点的例子, 假设有两台手机, 萤幕规格如下.
手机A: 萤幕解析度 2000x1000 pixel, mdpi
手机B: 萤幕解析度 1000X500 pixel, ldpi
假设你在萤幕上放一个按钮, 按钮尺寸宽为 「1000px」, 高为 「500px」
你注意到这会出现什麽情况了吗?
手机A, 萤幕上出现一个按钮, 大小约为萤幕的二分之一.
手机B, 会出现一个占满整个萤幕的按钮!
这是因为宽和高的单位是 「px」. (要进入正题惹)
解决办法是改用「dp」为单位, 如果按钮尺寸宽为「1000dp」, 高为「500dp」
系统会透过 px=dp*(dpi/160)公式帮你将 1000dp及 500dp转成 px值.
我简单解释公式的参数,
px: 是我们要的结果, 系统会依这个值来绘制.(由系统算)
dp: 你所指定的元件宽或高值.
dpi: 设备的 dpi值, lpdi值约 80, mdpi值约 160, hdpi约 240, xhdpi约 320
160: 以 160当作分母是有典故的, 好像是当时 google的第一款手机萤幕是
160dpi, 从那时候开始就以 160作为 mdpi标准.
OK 实际换算看看, 按钮 1000dp x 500dp
在设备A上...
宽: 1000dp * ( 160 / 160)= 1000px
高: 500dp * ( 160 / 160)= 500px
在设备B上...
宽: 1000dp * ( 80 / 160 )= 500px
高: 500dp * ( 80 / 160 )= 250px
最後, 同个按钮在设备 A和设备 B上看起来都占满二分之一.
看到这里还没 END算你厉害
本蛇要去八卦版发废文惹.....颗颗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.91.183
1F:推 openeyes222:赞! 08/16 08:02
2F:推 pkmilk:推~解释详细 08/16 08:29
3F:→ tga123:推专业 08/16 10:12
4F:→ lovelycateye:ldpi 是 0.75 喔 08/16 10:59
5F:→ lovelycateye:所以你底下资讯全部要重写过喔 08/16 11:01
严格来说在一定范围内的值都可以是 ldpi, 详见底下连结 Figure 1
所以范例不必重写
http://developer.android.com/guide/practices/screens_support.html
至於图片制作比例 ldpi的是 0.75没臭, 我记错惹
※ 编辑: fallenangels 来自: 163.13.201.26 (08/16 11:34)
※ 编辑: fallenangels 来自: 163.13.201.26 (08/16 11:36)
※ 编辑: fallenangels 来自: 163.13.201.26 (08/16 11:40)
6F:→ lovelycateye:ldpi 最低只到 120 08/16 15:31
7F:推 youweit:good 08/17 13:38
8F:推 gn01887818:推 08/18 10:26