Android游戏开发中比较重要和复杂的就是显示和游戏逻辑的处理。

这里我们说下android.view.Viewandroid.view.SurfaceView

SurfaceView是从View基类中派生出来的显示类,直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及Camera摄像头一般均使用SurfaceView,到底有哪些优势呢?

SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,相关的有Canvas lockCanvas()

Canvas lockCanvas(Rect dirty) 、void removeCallback(SurfaceHolder.Callback callback)、void unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制,

而在SurfaceHolder.Callback 接口回调中可以通过下面三个抽象类可以自己定义具体的实现,比如第一个更改格式和显示画面。



对于Surface相关的,Android底层还提供了GPU加速功能,所以一般实时性很强的应用中主要使用SurfaceView而不是直接从View构建,同时Android123未来后面说到的OpenGL中的GLSurfaceView也是从该类实现。


下面着重介绍View类:


以上是View实现的一些基本接口的回调方法,一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的:


当然还有就是处理窗口还原状态问题(一般用于横竖屏切换),除了在Activity中可以调用外,开发游戏时我们尽量在View中使用类似。


在View中如果需要强制调用绘制方法onDraw,可以使用invalidate()方法,它有很多重载版本,同时在线程中的postInvailidate()方法将在Android游戏开发之旅六中的 自定义View完整篇讲到。


转载自: http://www.android123.com.cn/androidkaifa/541.html



更多相关文章

  1. Android(安卓)Jetpack之LiveData源码分析
  2. 保存和重入Activity 状态的最简单方法
  3. android 4.0 屏蔽 HOME_KEY 和 RECENT_APP_KEY
  4. Android之NDK开发 Android(安卓)studio 篇
  5. android有了eventbus,一切与关界面通信问题迎刃而解。
  6. Android(安卓)WebView 与 原生的交互
  7. Android(安卓)四种异步操作UI界面的方法
  8. Android(安卓)Root方法原理解析及Hook(四) GingerBreak
  9. Android在非UI线程中更新UI的方法

随机推荐

  1. Android(安卓)6.0 动态申请权限无效问题
  2. ubuntu linux 解锁(unlock) root nexus s
  3. Android调用Camera,获取预览帧中的图像
  4. Android(安卓)AutoSearchBug自动捕获异常
  5. android setWebChromeClient和setWebView
  6. android 多个cursor 的读取 和读取某个Cu
  7. Android(安卓)接入百度内置导航demo
  8. Android写休闲游戏 翻翻看
  9. [Android]_[初级]_[sdk docs reference a
  10. Android(安卓)Studio报错:ERROR: Failed t