Android SurfaceView
程序员文章站
2022-08-08 10:14:03
SurfaceView Surface相当于绘制的容器,所有View和子类都是绘制在这里面。 SurfaceView是View的子类,将Surface的数据显示出来。 View适用主动更新视图,不需要频繁刷新。在主线程更新UI,没有双缓冲机制。 SurfaceView适用于被动更新视图,频繁刷新。通 ......
surfaceview
surface相当于绘制的容器,所有view和子类都是绘制在这里面。
surfaceview是view的子类,将surface的数据显示出来。
view适用主动更新视图,不需要频繁刷新。在主线程更新ui,没有双缓冲机制。
surfaceview适用于被动更新视图,频繁刷新。通过子线程更新ui,底层实现中就实现了双缓冲机制。
surfaceholder
surfaceholder是surface的抽象接口,操纵surface的控制器。
使用surfaceview的getholder()方法,获取surfaceholder对象
在surfaceview使用中需要的几个重要方法:
void addcallback(surfaceholder.callback var1); //为surfaceholder添加一个surfaceholder.callback回调接口 void removecallback(surfaceholder.callback var1); //从surface持有者中删除回调接口 canvas lockcanvas(); //获取canvas对象,并锁定 void unlockcanvasandpost(canvas var1); //释放同步锁,并显示 void setformat(int var1); //指定surface的像素格式,pixelformat常量 void setfixedsize(int var1, int var2); //固定surface的宽高 void setkeepscreenon(boolean var1); //false是允许屏幕关闭,true强制屏幕打开状态
surfaceholder.callback
实现surfaceholder.callback接口,创建surfaceview的生命周期,它有三个回调方法:
@override public void surfacecreated(surfaceholder holder) { //surface创建的时候调用 } @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { //surface大小被改变的时候调用 } @override public void surfacedestroyed(surfaceholder holder) { //surface被销毁的时候调用 }
实现runnable接口,利用子线程做绘图操作
绘制方法需要在绘制前调用locakcanvas锁定画布,得到画布。
绘制完成后需要调用lockcanvasandpost方法来解锁画布,显示。
@override public void run() { draw(); } private void draw() { try { mcanvas=mholder.lockcanvas(); //绘制 }catch (exception e){ }finally { //避免黑屏情况,解锁画布 if(mcanvas!=null){ mholder.unlockcanvasandpost(mcanvas); } } }
相关阅读
下一篇: 图学ES6-3.变量的解构赋值
推荐阅读