Preview

Q1: 啥是SurfaceView?

[一个自带surface 画布的view]

[能在子线程中做UI操作]

Q2:在Activity 中 内嵌 SurfaceView的情况下 , UI 是如何绘制的?

1)Activity 中ViewRoot 自带一个surface,我们叫它aSurface; SurfaceView 也自带一个surface,我们叫它mSurface。

2)UI 绘制在这个两个surface中进行,surface是按照Z 轴进行Layer 分层的,aSurface 的Z 轴值大于mSurface,所以它们的分层如图:mSurface 躲在aSurface的后面。

3)aSurface 躲在后面是如何显示的呢?SurfaceView 会对他的所有Parent 设置一个透明块,然后我们就看到了SurfaceView了。

Depth

了解SurfaceView 原理,我们需要回答三个核心问题

1)SurfaceView 是如何创建Surface的?

2)SurfaceView 是如何给Parent 设置透明区域的?

3)SurfaceView 是如何利用Surface来绘制的?

SurfaceView 是如何创建Surface的?

直接成员变量new 一个final对象出来

public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallback {

...

final Surface mSurface = new Surface(); // Current surface in use

...

}

复制代码

SurfaceView 是如何给Parent 设置透明区域的?

SurfaceView.onAttachedToWindow

@Override

protected void onAttachedToWindow() {

super.onAttachedToWindow();

...

mParent.requestTransparentRegion(SurfaceView.this);

...

}

复制代码

ViewRootImpl.dispatchWindwoVisibiltyChanged() 入口

然后回调到View的gatherTransparentRegion()设置透明区域

public boolean gatherTransparentRegion(Region region) {

...

if (mBackground != null && mBackground.getOpacity() != PixelFormat.TRANSPARENT) {

// The SKIP_DRAW flag IS set and the background drawable exists, we remove

// the background drawable's non-transparent parts from this transparent region.

applyDrawableToTransparentRegion(mBackground, region);

}

return true;

...

}复制代码

SurfaceView 是如何利用Surface来绘制的?

SurfaceFliger那一套

android view的绘制原理,SurfaceView 原理相关推荐

  1. Android View的绘制机制流程深入详解(一)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...

  2. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...

  3. Android View的绘制流程简述 Android自定义View(一)

    1 Android的UI管理系统层级关系 如上图所示,这就是Android的UI管理系统的层级关系. 1.1 当一个应用启动的时候,会启动一个主Activity,然后Activity会创建出一个窗口系 ...

  4. Android View的绘制流程

    View的绘制和事件处理是两个重要的主题,上一篇<图解 Android事件分发机制>已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为m ...

  5. Android View的绘制流程(1) -- 测量onMeasure

    鉴于是首篇讲解自定义view流程,之前也在网上搜了一些博主的博客看了看,都是大同小异,今天抽时间自己总结一下,分享一下自己的感悟,也算是一篇笔记. (本篇为开头篇,稍微讲述一下有关的东西) View的 ...

  6. 【Android View事件分发机制】原理

    事件体系中的几个基础类 MotionEvent 点击事件的封装. getX/Y 相当于当前View左上角的x,y坐标 getRawX/Y 相对于手机屏幕左上角的x,y坐标 GestureDetecto ...

  7. Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)...

    Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...

  8. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

  9. Android View绘制原理解析

    概述 本篇文章主要讲述View是如何在Android源码中产生的,以便于我们能够更好的去自定义一些控件,大体上是按照View绘制的流程来走步骤,在追踪源码之前我们先了解几个基础知识.来看下面的这张图: ...

最新文章

  1. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...
  2. 【UER #8】打雪仗
  3. Nginx +uwsgi+django配置
  4. BZOJ 3910 并查集+线段树合并
  5. .NET 时间轴:从出生到巨人
  6. HDOJ 2046 骨牌铺方格 【递推】
  7. linux下jdk源码安装,Linux JDK 源码安装
  8. IE低版本(6-9)CSS hack
  9. Jenkins学习总结(6)——Jenkins 的安全实践
  10. hyper-v ubuntu 图形界面不流畅_ubuntu简单美化教程
  11. Magento url 问题
  12. java执行Sql脚本
  13. oracle查参数,各种oracle参数查询语句
  14. WPS格式的文件如何转换为word格式
  15. php程序root权限,root权限是什么
  16. Plonky msm的改进版Yao算法
  17. 用JS输出菱形图案:
  18. 电动车电池放电口能冲电吗充电口和放电口是同一个吗
  19. 微软准备再次裁员2850人 一年之内完成
  20. 程序员写作云笔记推荐

热门文章

  1. 计组 | 字长大杂烩——字、位、字节等基本概念、按字寻址与按字节寻址
  2. 【JavaScript】颗粒归仓
  3. 笔记-软考高项+中项-错题笔记汇总5
  4. 拒绝字面意思的忽悠:scheduleWithFixedDelay与scheduleAtFixedRate的真正区别
  5. SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用
  6. 2022深圳杯A破除“尖叫效应”与“回声室效应”,走出“信息茧房”
  7. JVM虚拟机原理深入解析,聪明人已经收藏了!
  8. Linux驱动开发之工作队列
  9. python对有重复值的列求和之后放到第一次出现的位置
  10. PS制作流体渐变Logo