Re: 圆角屏幕(例:手表)的锁屏问题

(3/27/15, 8:22), 锦江 赵 wrote:
> 圆形屏幕和圆角屏幕相比确实已经完全不能跟矩形屏幕相提并论了
> 我分享一些自己想到的:
> 
> 1. 从现有的实现方式上看,这似乎更像是 device-orientation[1] +
> rotate[2] 做的事情

现有的实现?你确定么?大部分是用安卓的 Activity.setRequestedOrientation
或是 <activity> 的 android:screenOrientation 吧。

你们真的敢用 device-orientation + rotate?能不能在 GitHub 上找个例子秀一
下,特别是对屏幕可以滚动的怎么处理我对 CSS Transform 不是很熟有点好奇……

> 2. “360度”的方向会涉及到一个灵敏度的问题,得有个最小精度或降噪方法,不然
> 屏幕总是在微微晃动。感觉 4 个方向的 screen-orientation 是不麻烦的,但
> “360度”就会面对这个问题,不同的使用场景可能灵敏度需求还不一样,甚至需要
> 可配置

最小精度这个大概要有,不过这比较偏硬件、系统设计问题。对标准来说,主要还
是 “如果默认显示超过四个角度,lock() 需不需要要有一个值代表四个角度?”
还有 “如果默认显示是四个角度但是设备可以显示超过四个角度,lock() 需不需
要要有一个值代表显示尽量多个角度?” 这两个我在第一篇提出问题的变形,就算
没办法显示 “全部角度”。

当然,有可能显示超过四个角度本身就是不太可能会发生的事,不知道,如果有对
这方面比较清楚的还希望分享一下,因为不管怎么样如果有可能显示超过四个角
度,现在的 "any" 值就很有疑议,最好先拿掉(因为现在的 "any" 就定义成是四
个角度)。

> 3. 还有一点是屏幕就算是圆形的,但目前显示原理在物理上还是有横竖 2 个方向
> 的吧 (我不懂硬件乱猜测的)

应该是吧,lock("landscape") 跟 lock("portraint") 还是得照常运作。实际上
当前的规范就有个逻辑上的错误不支持横竖长度一样的设备,我也反馈了这个问题
[1]。会发生这种错误可能也只是因为写规范的人没特别想这种情况,或是觉得
“横竖等宽不太可能发生”。

可是实际上横竖等宽很容易发生,特别是不管是圆形或是圆角的手表。我觉得这里
的教训是最好也不要太假设 “显示超过四个角度不会发生”。

> 4. 所以真的适合从 screen-orientation 下手么?还是大方交给上层 js 处
> 理 device-orientation + rotate 就好呢?

同 1.,在我知道的历史中 Screen Orientation API 这个一直是做游戏的 Web 开
发在 public-webapps 要求了很久的东西,至于为什么一直不出来连我也很不明
白,Chrome 好像是半年前[2]才出来。实际上之前欧朋 Sphinx/欧朋浏览器为了
游戏都还类似 <activity> 的方式给 HTML 加了个 <meta content>(虽然这东西
产生了很多 bug……),我记得 UC 也做过类似的事。

[1] https://lists.w3.org/Archives/Public/public-webapps/2015JanMar/0892
[2] https://groups.google.com/a/chromium.org/d/topic/blink-dev/LsqzA7AXIis

(3/27/15, 9:03), HawkeyesAngel wrote:
> 我觉得都想多了,圆形屏幕的应用场景还是比较有限。
> 以手表为例,绝大多数情况下都是戴在手腕上的,而作为戴手表的人,在不摘下手
> 表的前提下360度的看表盘这种事根本做不到吧。

不是要 360 度看表,而是能显示 360 度。如果显示能不一定要垂直手臂,看表的
时候左手臂或许不需要顺时针弯太多,手臂自然举出自然弯就可以看得很清楚了
(你可以自己举举看手臂,会发现到 45 度挺自然的。当然也不用把左手臂逆时针
转成直的,太蠢了)。这个得问做设备用户体验的,如果确实不现实我也很有兴趣
听听为什么。

> 即便是挂钟、镜子之类的,也不会有360度自由旋转的情况。
> 暂时能想到的就是电子相框之类的了。

所以还是有可能吧?圆形屏幕以抽象的角度来想,是可以装载那种角度比较不固定
的物品上吧,比如说车轮、摩天轮、风车、篮球(我知道这些听起来都很怪,暂时
没想到比较合理的)。

圆形屏幕的一个特殊好处是如果有一个晶格坏了可以把它转到比较不重要的角度……

(3/27/15, 23:39), Ming-ting Wei wrote:
> 沒錯,加上斜角的話字體的 subpixel 更難處理,而且手錶要怎麼知道人類讀取手
> 錶文字的方向?,所以預設還是有一個固定方向的。

如果是我说的那个手臂随便伸都可以看到文字的话,反正也是重力感应后的垂直地
面的方向吧,但是这个方向不是固定的,跟手臂怎么伸有关。还是回到上面那个问
题 “如果默认显示是四个角度但是设备可以显示超过四个角度,lock() 需不需要
要有一个值代表显示尽量多个角度?”。以当前规范来看会可能是 lock("any") 这
个值,别忘了这里 lock("landscape") 或是 lock("portraint") 都不是对的,这
两个值只可能是垂直或是平行手臂的角度。

但是就我第一篇说的,这里 lock("any") 不如 lock("360") 或是
lock("gravity") 之类的容易理解。另外,我不知道需不需要有一个
lock("current") 之类的把现在的显示角度锁住,比如说举手看表可能是 "any" →
"current" 这种变化,也就是手举出之后最好显示角度就不要再变化了。现在规范
里没有这样的值,需要透过  screen.orientation.angle 才知道要用 "primary-
landscape"、"primary-portraint"、"secondary-landscape"、"secondary-
portaint" 哪一个。


以上

吕康豪
-- 
Software Engineer, Shenzhen, BGI

Received on Friday, 3 April 2015 00:18:35 UTC