
View
文章平均质量分 73
学习笔记。
Jomurphys
这个作者很懒,什么都没留下…
展开
-
View 使用 - RecyclerView(DiffUtil、ConcatAdaper)
顾名思义不用操心 view 的复用,通过LayoutManager可设置数据的不同展示方式例如列表网格瀑布流,还可以设置item添加删除的动画和间隔样式。原创 2023-02-15 04:55:57 · 1185 阅读 · 0 评论 -
View 使用 - Toolbar
默认显示的 ActionBar 来自于主题指定(Manifest中application所指定,activity也会单独指定),由于不能实现 Materrial Design 效果已不再建议使用。原创 2022-11-10 01:48:00 · 481 阅读 · 0 评论 -
View 使用 - ConstraintLayout
解决布局嵌套过多的问题,采用方向约束的方式对控件进行定位,至少要保证水平和垂直方向都至少有一个约束才能确定控件的位置。原创 2023-05-05 23:52:44 · 2471 阅读 · 1 评论 -
View 使用 - ViewStub
当需要根据条件来显示/隐藏某个 View 的时候,通常是把用到的 View 全都写出来,之后通过代码动态的设置可见性(GONE、INVISIBLE),即便不可见也会被绘制耗费资源。而 ViewStub 是一个大小为0不可见的控件,只有调用了 setVisibility() 或 inflate() 后才会填充布局资源并被替换掉(区别是否要使用填充布局中的控件),宽高使用的是 ViewStub 定义的。原创 2023-05-12 22:12:26 · 334 阅读 · 0 评论 -
View 使用 - 标准控件的一些设置
可见性visiable可见、invisiable不可见但占位(点击无效)、gone不可见不占位(点击无效)。不强制变成大写字母权重,定义了weight总和的最大值。原创 2023-03-12 00:17:48 · 181 阅读 · 0 评论 -
View 自定义 - 概览
从 DecorView 中可以看出 View 的绘制流程开始于ViewRootImpl 对象的 performTraversals(),从视图树根节点(即 DecorView 它是个 ViewGroup)开始由上向下遍历测绘(DecorView→中间层ViewGroup→最底层View)。顶部图中可以看出 ViewRoot 最后一步是绘制,在绘制之前系统会有一些准备,即前面几个步骤:创建PhoneWindow、DecorView、ViewRootmpl。确定控件最终宽高在父容器中的位置。原创 2023-10-19 19:40:15 · 168 阅读 · 0 评论 -
View 自定义 - View 体系和方法
View这个类代表用户界面组件的基本构建块。View在屏幕上占据一个矩形区域,并负责绘制和事件处理。View是用于创建交互式用户界面组件(按钮、文本等)的基础类。它的子类ViewGroup是所有布局的父类,它是一个可以包含其他view或者viewGroup并定义它们的布局属性的看不见的容器。单参构造:代码中 new 创建实例的时候调用。双参构造:xml中使用时调用(xml转java代码的时候反射),attrs是xml中的属性。三参构造:使用主题Style的时候调用。原创 2024-01-16 19:06:05 · 893 阅读 · 0 评论 -
View 自定义 - Activity、Window、DecorView、ViewRoot
通过 WindowManager 创建 DecorView 来加载 Activity 的布局,并将它交给 ViewRoot 进行视图绘制和其它交互。Window是一个抽象类,Activity实际持有的是其子类 PhoneWindow,PhoneWindow有一个内部类DecorView。不负责视图控制,真正控制视图的是 Window,它真正代表一个窗口,一个Activity包含一个 Window。管理视图的添加与显示(内部持有一个Window),通过回调与 Window 及 View 进行交互。原创 2023-10-19 14:26:49 · 163 阅读 · 0 评论 -
View 自定义 - 绘制前的准备 DecorView
图中可以看出 ViewRoot 最后一步是绘制,在绘制之前系统会有一些准备,即前面几个步骤:创建PhoneWindow、DecorView、ViewRootmpl。原创 2023-10-19 15:40:52 · 140 阅读 · 0 评论 -
View 自定义 - 坐标系、位置获取
屏幕的左上角为坐标原点,向右为x轴正向,向下为y轴正向。原创 2023-10-19 17:52:20 · 244 阅读 · 0 评论 -
View 自定义 - 构造和属性 Constructor & Attribute
右键 values 目录 -> New File文件 -> 一般取名attrs.xml。--name使用自定义View的名称-->--name属性名称,format格式-->--枚举-->原创 2023-11-08 22:41:33 · 691 阅读 · 0 评论 -
View 自定义 - 不同的实现方式
无论是改造现有的控件(如继承ImageView)还是直接继承View,都需要对构造函数进行重写。onMeasure()、onLayout() 中用到的全局变量不能在构造中初始化(要在他们自己中),因为构造只走一次,而他们可能会执行很多次。//创建实例的时候调用//xml中使用时调用(xml转java代码的时候反射)//使用主题的时候调用= null= null= null= null= null= null//改成this调用2个参数的构造//改成this调用3个参数的构造。原创 2022-10-21 17:08:30 · 237 阅读 · 0 评论 -
View 自定义 - 组合已有控件
现有的控件已经有了自己的正确尺寸算法,结果可以作为参考值根据我们的需求进行调整。自定义子类继承自已有的控件。重写 onMeasure(),调用 super.onMeasure() 进行一次原有的测量,通过 getMeasuredHeight()、getMeasuredWidth() 获取测量结果并修改成想要的值。最终调用 setMeasuredDimension() 保存。原创 2024-01-18 21:01:34 · 986 阅读 · 0 评论 -
View 自定义 - 测量 Mersure
在这里进行控件的测量,形参分别是宽和高的测量空间(都是一个32位的Int值 = 前2位表示模式 + 后30位表示值),需要分别对宽高的模式进行判断并做出对应情况的值测量赋值。原创 2022-12-01 03:08:23 · 297 阅读 · 0 评论 -
View 自定义 - 布局 Layout
通过 setMeasuredDimension( ) 进行设置的。在 measure( ) 结束后就可以获取到。获取布局后的值(名字中省略了Layouted)在 layout( ) 执行后才能获取到。通过视图右边坐标减去左边坐标计算出来的。原创 2023-05-02 00:54:49 · 127 阅读 · 0 评论 -
View 自定义 - 绘制 Draw
通过 setMeasuredDimension( ) 进行设置的。宽或高设置为match_parent,即孩子可设置为最大上限值。宽或高设置为wrap_content,即不对孩子施加束缚。参数三:自己从LayoutParams中得到的宽或高的值。宽或高设置为具体值dp/px,即主动限制孩子的上限值。参数一:父亲宽或高的测量规格MeasureSpec。获取布局后的值(名字中省略了Layouted)相对于孩子,父亲在上下左右自己占用的距离。参数二:父亲在宽或高上自己占用的距离。UNSPECIFIED 未指定。原创 2023-03-02 13:36:05 · 81 阅读 · 0 评论 -
View 自定义 - 画布 Canvas
通过描述路径的方式来绘制图形,Path是描述路径的对象。原创 2022-12-02 02:44:08 · 204 阅读 · 0 评论 -
View 自定义 - 路径 Path
用于描述顺序 & 区域,单使用无法产生效果。原创 2023-11-08 17:15:26 · 183 阅读 · 0 评论 -
View 自定义 - 颜料 Paint
在第二步画圆的时候,跟它共同计算的是第一步绘制的方形。但实际上,却是整个 View 的显示区域都在画圆的时候参与计算,并且 View 自身的底色并不是默认的透明色,而且是遵循一种迷之逻辑,导致不仅绘制的是整个圆的范围,而且在范围之外都变成了黑色。通过使用离屏缓冲,把要绘制的内容单独绘制在缓冲层, Xfermode 的使用就不会出现奇怪的结果了。要绘制的内容作为源图像,View中已有的内容作为目标图像,指定一个 PorterDuff.Mode 作为绘制内容的颜色处理方案。原创 2023-05-04 02:16:45 · 893 阅读 · 0 评论 -
View 自定义 - 事件分发
编写自定义 ViewGroup 的时候不要直接拦截所有事件,DOWN 一定要传递到最底层,否则拦得太死传递不下去,子控件没办法申请父控件不要拦截(子控件在 dispatchTouchEvent( ) 写入一行 getParent().resquestDisallowInterceptTouchEvent(true) )。当ViewGroup 要拦截事件时,拦截逻辑写在onInterceptTouchEvent( ),处理逻辑写在onTouchEvent( )。原创 2023-03-10 19:35:08 · 793 阅读 · 0 评论 -
View 自定义 - 一些使用技巧
【代码】View 自定义 - 一些使用技巧。原创 2024-01-26 22:34:46 · 410 阅读 · 0 评论