android.view.SurfaceView,android surfaceview和view区别

android.view.SurfaceView,android surfaceview和view区别,Android SurfaceView基础用法详解

本文主要介绍Android SurfaceView的基本用法。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

Android 游戏开发框架核心组件

核心组件介绍

SurfaceView 介绍

SurfaceView简介SurfaceView是一个带有曲面的视图。它是一个视图,也是视图的子类,所以和其他视图一样,它可以在屏幕上显示东西来接收用户输入。它具有view的生命周期回调函数,如onMeasure、onLayout、onDraw、onTouchEvent等。

View有一个独立面(独立和窗口面),允许一个子线程在独立面上画东西,画SurfaceView的界面。这个子线程叫做渲染线程,但是独立表面上的东西应该显示在视图上。您需要向主线程发送一个消息,以便将这个表面的画布上的东西绘制到视图的真实画布上(窗口表面的画布上),这样您就可以释放UI线程来处理用户的交互。

表面可能会被销毁,只在Surface holder . callback . Surface created()和Surface holder . callback . Surface destroyed()之间有效,只意味着当表面被创建和销毁时,会回到前两个方法,所以要确保渲染线程访问的是合法有效的表面。

表面固定器。回调通过SurfaceView的SurfaceHolder的addCallBack设置为SurfaceHolder。如果SurfaceView实现了回调并将其设置为SurfaceHolder,则SurfaceView可以监视这个独立表面的创建和销毁。

sdk 中的介绍

SurfaceView视图的继承类,其中嵌入了一个用于绘图的表面。您可以控制此表面的格式和大小。视图控制此表面的绘制位置。

Surface是Z排序的,这意味着它总是在自己的窗口后面。视图提供了一个可视区域。只有在这个可见区域内,surfaceview内容的一部分是可见的,可见区域外的部分是不可见的。

surface的布局显示受视图层次结构的影响,其同级视图节点将显示在顶部。这意味着表面

的内容被其同级视图阻止,此功能可用于放置覆盖图(例如,文本和按钮等控件)。注意,如果表面有透明控件,它的每一个变化都会导致框架重新计算它和顶层控件之间的透明效果,从而影响性能。

可以通过surfaceHolder接口访问这个表面,getHolder()方法可以获取这个接口。

当视图变得可见时,创建表面视图;在视图隐藏之前,表面视图被破坏。这样可以节省资源。如果要检查曲面是何时创建和销毁的,可以重载surfaceCreated(SurfaceHolder)和Surface Destroyed (Surface Holder)。Surface View的核心在于它提供了两个线程:UI线程和渲染线程。

这里应该注意:

1.SurfaceView和SurfaceHolder的所有方法。回调将在UI线程中调用,UI线程一般是应用程序的主线程。因此,渲染线程要访问的变量应该是同步的。

2.由于表面可能被破坏,所以它只在surface holder . callback . surface created()和surface holder . callback . surface destroyed()之间有效,所以要确保渲染线程访问的是合法有效的。

表面.

SurfaceHolder 介绍

SurfaceHolder是SurfaceView的Surface的封装,它不仅负责SurfaceHolder.callback接口中Surface的创建和销毁的回调,而且Surface的关键方法LockCanvas()和unLockCanvasAndPost()都是线程安全的,所以SurfaceHolder是Surface对象的持有者,负责在Surface的生命周期中调用Surface操作的方法。

脏矩形Rect dirty表示这个矩形区域的数据无效,也就是需要重写的矩形区域。LockCanvas(Rect dirty)可以在Surface中指定一个矩形区域在画布上重画一些数据。

SurfaceView、SurfaceHolder、Surface 之间的关系

SurfaceView 使用的步骤

获取到表面视图对应的表面固定器,给表面固定器添加一个SurfaceHolder.callback对象。

创建渲染线程对象

在子线程中开始在表面上面绘制图形,因为表面视图没有对我们暴露表面,而只是暴露了表面的包装器表面固定器,所以使用表面固定器的lockCanvas()获取表面上面指定区域的画布,在该帆布上绘制图形,绘制结束后,使用表面固定器的unlockCanvasAndPost()方法解锁画布,并且让用户界面线程把表面上面的东西绘制到视角的帆布上面

SurfaceView 使用的 demo

公共类GameUI扩展表面视图实现表面固定器.回拨{

专用表面夹具夹具;

私有渲染线程渲染线程

私有布尔值isDraw=false//控制绘制的开关

公共游戏界面(上下文上下文){

超级(上下文);

holder=这个。get holder();

持有人。添加回调(this);

渲染线程=新渲染线程();

}

@覆盖

公共空表面已更改(表面固定器固定器,整数格式,整数宽度,整数高度){

}

@覆盖

已创建公共空曲面(曲面持有者){

isDraw=true

渲染线程。start();

}

@覆盖

公共空表面销毁(表面持有者){

isDraw=false

}

/**

* 绘制界面的线程

*

* @作者管理员

*

*/

私有类渲染线程扩展线程{

@覆盖

公共无效运行(){

//不停绘制界面

while (isDraw) {

draw ui();

}

超级棒。run();

}

}

/**

* 界面绘制

*/

公共void drawUI() {

画布canvas=holder。lock canvas();

尝试{

绘图画布(画布);

} catch(异常e) {

e。printstacktrace();

}最后{

holder.unlockCanvasAndPost(画布);

}

}

私有void绘图画布(画布画布){

//在帆布上绘制需要的图形

}

}

到此这篇关于Android SurfaceView基础用法详解的文章就介绍到这了,更多相关Android SurfaceView基础内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: