Re: [问题] view.View & view.Surface 关系

楼主: cha122977 (CHA)   2016-01-08 21:13:07
※ 引述《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的问题,这边就不多说了…
作者: kobe8112 (小B)   2016-01-10 01:49:00
还有一个主要的区别,你如果不需要高速即时重绘图案,就用普通的前者即可,否则的话,后者的实际重绘时机是你可以自己掌握的,可以达到流畅的动画效果,并且不会使主线程阻塞
作者: tac0wu (在BBS中流浪)   2016-01-13 20:10:00
如果是在没有OGL的case下 硬件加速的一般view不见得比较慢https://goo.gl/w8BmWD 官方网站的这篇值得反复阅读

Links booklink

Contact Us: admin [ a t ] ucptt.com