当前位置: 移动技术网 > IT编程>移动开发>Android > Android SurfaceView

Android SurfaceView

2018年08月18日  | 移动技术网IT编程  | 我要评论

宋小宝相亲1高清,p2p理财论坛,老庙黄金价格多少一克

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);
         }
     }
}

 相关阅读

surfaceview开启相机预览

surfaceview实现跟随手指移动的光标

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网