avatar
文章
864
标签
158
分类
0

主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我
麦溪·在路上
主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我

麦溪·在路上

Android之View绘制深度解析之Layout流程
发表于2022-01-05
[TOC] 文章参考:https://www.jianshu.com/p/95afeb7c8335 概述
Android之View绘制深度解析之Draw流程
发表于2022-01-05
[TOC] 文章参考:https://www.jianshu.com/p/95afeb7c8335 概述绘制View视图。类似measure过程、layout过程,draw过程根据View的类型分为2种情况: 单一View的draw过程 下面我将一个个方法进行详细分析:draw过程的入口 = draw() 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143/** * 源码分析:draw() ...
Android之View绘制深度解析之invalidate和postInvalidate
发表于2022-01-05
[TOC] 概述invalidate该方法的调用会引起View树的重绘,常用于内部调用(比如 setVisiblity())或者需要刷新界面的时候,需要在主线程(即UI线程)中调用该方法。那么我们来分析一下它的实现。 首先,一个子View调用该方法,那么我们直接看View#invalidate方法: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 /** * Invalidate the whole view. If the view is visible, * {@link #onDraw(android.graphics.Canvas)} will be called at some point in * the future. * <p> * This must be called from a UI thread. To ...
Android之View绘制深度解析之requestLayout
发表于2022-01-05
[TOC] 文章参考:https://juejin.im/post/6844903829113143303 文章参考:https://mp.weixin.qq.com/s/BeYCM6AUsJ9qzhb5_XAweQ 前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对View的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。 requestLayout当我们动态移动一个View的位置,或者View的大小、形状发生了变化的时候,我们可以在view中调用这个方法,即: 1view.requestLayout(); 那么该方法的作用是什么呢? 从方法名字可以知道,“请求布局”,那就是说,如果调用了这个方法,那么对于一个子View来说,应该会重新进行布局流程。但是,真实情况略有不同,如果子View调用了这个方法,其实会从View树重新进行一次测量、布局、绘制这三个流程,最终就会显示子View的最终情况。那么,这个方法是怎么实现的呢?我们 ...
Android之View绘制深度解析之mPrivateFlags字段
发表于2022-01-05
[TOC] 概述前面的深度解析中,我们在View执行requestlayout的布局逻辑中,有这样两行代码: 12mPrivateFlags |= PFLAG_FORCE_LAYOUT;mPrivateFlags |= PFLAG_INVALIDATED; 函数给当前View设置了两个flag:PFLAG_FORCE_LAYOUT和PFLAG_INVALIDATED View中mPrivateFlags字段View内部有个int类型的mPrivateFlags字段,这个字段会View的整个显示流程进行控制,就相当于我们平时开发时,自定义的一系列的boolean值。 它的工作原理是位运算,这里拿PFLAG_FORCE_LAYOUT举例,通过调用mPrivateFlags |= PFLAG_FORCE_LAYOUT将mPrivateFlags的PFLAG_FORCE_LAYOUT位设置为1,不设置的情况下是0。当设置为1的时候,意味着当前View有个操作需要执行或者某项操作已经执行完了,然后设置成1标记状态。 除了PFLAG_FORCE_LAYOUT,View内部还有很多的Fl ...
面试题-为什么不能在子线程更新UI
发表于2022-01-05
[TOC] 概述在我们学习多线程的路上,都会听到这样一句话: 不能在子线程里更新UI,UI更新必须在UI线程中: why?为什么不能在子线程中更新UI?如果在子线程中更新UI会怎样? 为了模拟在子线程中更新UI的场景,简单地写了几行代码: 123456789101112131415161718@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saButton = (Button) findViewById(R.id.text); final Thread thread = new Thread(new Runnable() { @Override public void run() { ((TextView ...
Android之View的坐标系基础知识
发表于2022-01-05
[TOC] 文章参考:https://www.jianshu.com/p/071e04108f4d 概述 可以看出与传统的坐标系有所不同的是,屏幕的左上角作为坐标原点,X轴向右为正,Y轴向下为正。 上图分为四个层次,由内到外依次为: 第一层为触摸点MotionEvent 第二层为View,作为第三层的子布局 第三层为Window/RootView(根View的尺寸与Window尺寸一致),作为第二层的父布局,也是作为整个ViewTree的根布局 第四层为屏幕 基础概念讲解触摸点(MotionEvent)坐标 上图红色部分为触摸点坐标相关的。 getX()、getY()获取的坐标是相对于其所在的View,相对于View的左上角 getRawX()、getRawY()获取的坐标是相对于整个屏幕的,相对于屏幕的左上角 对于同一个坐标点(getRawX()/getRawY()相同),在不同的View里,getX()、getY()可能不同: 黑色箭头是触摸点在View1里的getX()/getY()。 蓝色箭头是触摸点在View2里的getX()/g ...
Android之Bitmap的基础知识学习
发表于2022-01-05
[TOC] 文章参考:https://www.jianshu.com/p/98c88f9ceafa https://juejin.im/entry/59b6419d5188257e82675716 https://juejin.im/post/5b03b38af265da0b796535dd App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap。Bitmap在Android中指的是一张图片,可以是png,也可以是jpg等其他图片格式。它是Android中最能吃内存的对象之一,也是很多OOM的元凶。所以,用好Bitmap对Android开发者来说就显得比较重要了。也是我们应用性能优化的至关重要的一环。 例如:使用Pixel手机拍摄4048x3036像素(1200W)的照片,如果按ARGB_8888来显示的话,需要48MB的内存空间(404830364 bytes),这么大的内存消耗极易引发OOM。 Bitmap的基本使用Bitmap的加载离不开BitmapFactory类,关于Bitmap官方介绍Creates B ...
Android的View之ViewTreeObserver源码解析
发表于2022-01-05
[TOC] 文章参考:https://blog.csdn.net/whoami_I/article/details/102805969 概述先说ViewTreeObserver是什么? ViewTreeObserver 是被用来注册监听视图树的观察者,在视图树发生全局改变时将收到通知。本文从 ViewTreeObserver 源码出发,带你剖析 ViewTreeObserver 的设计及使用,并间接体会观察者模式、Android消息传递机制在其中的使用。 我们怎么去理解ViewTreeObserver呢? ViewTreeObserver,拆开来理解就是 ViewTree 和 Observer。 ViewTree 就是我们常说的视图树,在Android中,所有视图都是由View及View的子类构成,ViewGroup 也是View的子类,它可以装载View或者ViewGroup,这样,一层层嵌套,就有了视图树的概念。 Observer 即观察者的意思,其对应的观察者模式是软件设计模式的一种,在许多编程语言中被广泛运用。其核心在于:一个目标对象,我们称之为被观察者(Observable) ...
Android系统View之GLSurfaceVIew学习
发表于2022-01-05
[TOC] 文章参考:https://zhuanlan.zhihu.com/p/271270354 文章参考:https://zhuanlan.zhihu.com/p/145331514 概述Android对OpenGL这块封装是非常好的,也是非常隐蔽的,一般使用者直接使用GLSurfaceView即可达到需求。最近项目中将很多功能下层到c++层,这样必须对OpenGL 底层逻辑有所了解。Android虽然提供OpenGL 各个版本的So库,但是并没有对底层api做封装,所以如果是自己想用C++写OpenGL,最好的方式学习Android源码。 GLSurfaceView使用12345678910111213surfaceView = findViewById(R.id.triangle_api_surfaceView)surfaceView.setEGLContextClientVersion(3) surfaceView.setRenderer(object : GLSurfaceView.Renderer { override fun onSurfaceCreat ...
1…212223…87
avatar
Frewen.Wang
在青麦地上跑着,雪和太阳的光芒
文章
864
标签
158
分类
0
关注我
公告
This is my Blog
最新文章
无题2023-12-22
无题2023-07-28
无题2023-07-27
基于Windows11安装Ubuntu双系统2023-07-20
无题2023-07-17
标签
系统源码 滤波算法 工具使用 云存储 卷积神经 Linux Android框架 STL函数 Activity pytorch NEON 编译脚本 go 渲染机制 OpenGL 编程工具 虚函数 RectNative JVM Linux命令 Kotlin基础 OpenMP AI const IDEA QNN C++ SELinux 目标检测 软件安装 threading 量化方法 四大组件 编译构建 SystemServer 开源项目 unique_ptr Java基础 系统安装 BroadcastReceiver
归档
  • 十二月 20231
  • 七月 20234
  • 六月 20231
  • 四月 20231
  • 三月 20232
  • 二月 202311
  • 一月 20232
  • 十二月 20221
网站资讯
文章数目 :
864
本站总字数 :
778.1k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2023 By Frewen.Wang
框架 Hexo|主题 Butterfly