作者cha122977 (CHA)
看板AndroidDev
标题Re: [问题] view.View & view.Surface 关系
时间Fri Jan 8 21:13:07 2016
※ 引述《Laleh (Laleh)》之铭言:
: 大家好:
: 最近在查 View 和 Surface 之间差异
: 因为要画图,部过网路上资源看得雾煞煞
: 不太懂他们之间的关系跟使用时机
: 有没有前辈能指教一下~
: 3Q
记然是和View比又提到画图,我就当你问的是SurfaceView了
(因为在Android里还有一个真的叫Surface的class)
SurfaceView基本上就是直接给你一张白纸,你自己拿Canvas在上面画东西。
另外Android会把他当成独立图层来处理(这是最主要的差异)
还有一点是SurfaceView的绘制工作可以跑在non-UI thread.
可以由呼叫SurfaceHolder.lockCanvas()/unlockAndPost()的时机来决定何时绘图
设计上,View是让你客制UI原件时继承用的
虽然也可以画东西,但那是透过override onDraw(Canvas canvas)来实现
主要是让你画这个View的"外观"用的
而且用onDraw()来画的话,画图也必定是在UI thread上做
画图的"时机"也没办法自己决定,是完全交给framework决定
大致上,根据你想显示的内容就可以判断你要用哪个来画:
想做一个特殊的按钮 => 用View
想在画面上显示一些三角形或几何图形之类的 => 用SurfaceView
至於SurfaceView的独立图层有什麽好处呢?
这还牵扯到framebufer composition的问题,这边就不多说了…
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.240.189
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1452258790.A.455.html
1F:→ kobe8112: 还有一个主要的区别,你如果不需要高速即时重绘图案, 01/10 01:49
2F:→ kobe8112: 就用普通的前者即可,否则的话,後者的实际重绘时机是 01/10 01:49
3F:→ kobe8112: 你可以自己掌握的,可以达到流畅的动画效果,并且不会 01/10 01:50
4F:→ kobe8112: 使主线程阻塞 01/10 01:50
5F:推 tac0wu: 如果是在没有OGL的case下 硬体加速的一般view不见得比较慢 01/13 20:10