SurfaceView 基础用法

概要

刚接触Android开发的同学都被灌输过一个理念,一般情况下View的更新必须要在主线程操作。这也符合我们平时的操作习惯,先有输入事件,然后view响应了输入事件再去更新。但总会遇到需要在子线程更新View的情景,比如玩《节奏大师》这种手游时,View一直在不断的更新,并且更新的频率很高,这种情况如果再放到主线程去处理View的更新事件,就不合适时宜了。Android 为解决该类应用场景,给View家族增加了一个异类—SurfaceView,它能在子线程中去刷新View。本篇博文介绍其基础用法。

SurfaceView类粗略认识

分析一个陌生类之前,最好避免开篇就进入其类部,追查各个方法,而是要从宏观的角度查看其继承关系,实现接口,类的注释等,这样避免陷入细节的泥潭走不出来。回到主题,先从api文档看SurfaceView的继承结构,具体如下图:
这里写图片描述
在看具体代码

public class SurfaceView extends View {
   

这里先明确SurfaceView就是一个View的概念,读代码跟认识人都差不多,我们在和陌生人接触时如果发现双方都认识同一个人,立马会拉近彼此的距离。这里我们也算是找到了一个亲戚,看到SurfaceView是个View,是不是心里对代码亲近了许多。
在看其类层的注释,由于注释很长就不贴出来了,直接说下我从注释里获取的信息。
1. SurfaceView的作用:提供一个可嵌入View的Surface,通过它能控制surface的格式、大小等。类比TextView和text的关系,可以把Surface当成一个text。
2.SurfaceView的特点:Surface是Z方向排列,它在window的下面。SurfaceView会在window上挖个洞将Surface暴露出来。在SurfaceView可见的时候就会创建出Surface,子线程可以将Surface渲染到屏幕上。SurfaceView所属的window在哪个线程运行,SurfaceView以及SurfaceHolder.Callback所属的方法就会在该线程调用。
3. SurfaceView怎么用:通过SurfaceHolder来管理Surface,实现SurfaceHolder.Callback.surfaceCreated和SurfaceHolder.Callback.surfaceDestroyed方法可以跟踪Surface被创建和销毁的事件。

SurfaceView实战

上面扯了点闲蛋,下面进入实战。用一个实例来演示SurfaceView 基础用法。先放一张效果图,美女引狼,知道大家好这口,不解释。
这里写图片描述
暂时没有在Ubuntu环境下找到好的制作gif图片的工具,静态图将就看,运行效果脑补下。我们要实现的效果是,通过SurfaceView将美女加载显示出来,如果不满意,点击button切换下一位美女。
先放布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/switch_img"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:paddingBottom="5dp"
        android:text="点击切换图片" /&g
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值