android view的绘制原理,SurfaceView 原理
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 原理相关推荐
- Android View的绘制机制流程深入详解(一)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...
- Android View的绘制机制流程深入详解(二)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...
- Android View的绘制流程简述 Android自定义View(一)
1 Android的UI管理系统层级关系 如上图所示,这就是Android的UI管理系统的层级关系. 1.1 当一个应用启动的时候,会启动一个主Activity,然后Activity会创建出一个窗口系 ...
- Android View的绘制流程
View的绘制和事件处理是两个重要的主题,上一篇<图解 Android事件分发机制>已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为m ...
- Android View的绘制流程(1) -- 测量onMeasure
鉴于是首篇讲解自定义view流程,之前也在网上搜了一些博主的博客看了看,都是大同小异,今天抽时间自己总结一下,分享一下自己的感悟,也算是一篇笔记. (本篇为开头篇,稍微讲述一下有关的东西) View的 ...
- 【Android View事件分发机制】原理
事件体系中的几个基础类 MotionEvent 点击事件的封装. getX/Y 相当于当前View左上角的x,y坐标 getRawX/Y 相对于手机屏幕左上角的x,y坐标 GestureDetecto ...
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)...
Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...
2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点: 1.View的几种不同状态属性 2.如何根 ...
- Android View绘制原理解析
概述 本篇文章主要讲述View是如何在Android源码中产生的,以便于我们能够更好的去自定义一些控件,大体上是按照View绘制的流程来走步骤,在追踪源码之前我们先了解几个基础知识.来看下面的这张图: ...
最新文章
- linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...
- 【UER #8】打雪仗
- Nginx +uwsgi+django配置
- BZOJ 3910 并查集+线段树合并
- .NET 时间轴:从出生到巨人
- HDOJ 2046 骨牌铺方格 【递推】
- linux下jdk源码安装,Linux JDK 源码安装
- IE低版本(6-9)CSS hack
- Jenkins学习总结(6)——Jenkins 的安全实践
- hyper-v ubuntu 图形界面不流畅_ubuntu简单美化教程
- Magento url 问题
- java执行Sql脚本
- oracle查参数,各种oracle参数查询语句
- WPS格式的文件如何转换为word格式
- php程序root权限,root权限是什么
- Plonky msm的改进版Yao算法
- 用JS输出菱形图案:
- 电动车电池放电口能冲电吗充电口和放电口是同一个吗
- 微软准备再次裁员2850人 一年之内完成
- 程序员写作云笔记推荐
热门文章
- 计组 | 字长大杂烩——字、位、字节等基本概念、按字寻址与按字节寻址
- 【JavaScript】颗粒归仓
- 笔记-软考高项+中项-错题笔记汇总5
- 拒绝字面意思的忽悠:scheduleWithFixedDelay与scheduleAtFixedRate的真正区别
- SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用
- 2022深圳杯A破除“尖叫效应”与“回声室效应”,走出“信息茧房”
- JVM虚拟机原理深入解析,聪明人已经收藏了!
- Linux驱动开发之工作队列
- python对有重复值的列求和之后放到第一次出现的位置
- PS制作流体渐变Logo