Android-UI组件 |青训营笔记

88 阅读2分钟

Android-UI组件|青训营笔记

这是我参加「第四届青训营」笔记创作活动第二天

1.1UI组件

例:输入框组件、按钮组件、文本组件、播放器组件、图片组件、列表组件 image.png

image.png 其内部展示图

image.png

高级UI组件

image.png

常规UI组件大多是view,高级UI组件大多是ViewGroup、比常规组件多的功能

view和viewGroup的关系

image.png

部分view继承关系

image.png

1.2布局

linearLayout

image.png

RelativeLayout

image.png

image.png FrameLayout

image.png

前景图像:永远处于FrameLayout最上层,不会被覆盖的图片

ConstrainLayout

image.png image.png

布局总结

image.png

布局加载

1.编写布局文件

2.注册Manifest

3.设置布局文件

布局解析

image.png

1.3渲染

为什么Activity在onResume()之后显示?

onCreate():setContentView()创建了DecorView,并将layout中view添加至DecorView中 onCreate():ActivityThread.handleResumeActivity()

  1. windowManagerImpl.addView
  2. 创建ViewRootImpl
  3. ViewRootImpl.setView
  4. ViewRootImpl.requestLayout(),触发页面绘制

View绘制流程

image.png 页面绘制流程

image.png Vsync信号

image.png UI渲染

image.png 渲染总结

image.png

1.4交互

  1. 获取View实例
  2. 添加相应的监听器

View和ViewGroup关系

image.png 常用交互时间监听

image.png 屏幕触摸事件

image.png

所有交互事件都来自于对屏幕触摸信号的处理,View.onClickListener()等常用点击事件时对交互事件的二次封装

触摸事件

image.png

当用户触摸屏幕时,系统将建立一系列的MotionEvent对象,MotionEvent包含关于发生触摸的位置和时间等信息MotionEvent对象被传递到相应的捕获函数中例如ontouchEvent()

触摸事件分发

image.png 事件处理流程

image.png 交互总结

image.png

1.5动画

帧动画

image.png 补间动画

image.png 属性动画

image.png 小结

image.png

image.png

两类动画根本区别在于:是否改变动画本身的属性

  1. 视图动画:不改变动画的属性,在动画过程中仅对图像进行变换来达到动画效果,无论动画结果在哪,该View的位置和响应都是在原地,不会根据结果移动
  2. 属性动画:改变了动画属性因属性动画在动画过程中对动态改变了对象属性,从而达到动画效果

\