这是我参与「第四届青训营 」笔记创作活动的第3天
主要为思维导图大纲,收集课堂要点和一些补充知识
欢迎补充&指正
常规&高级UI编程
1.UI组件
常规UI组件view
-
user interface图形用户界面
-
通用方法与属性
-
属性
- id
- height
- width
- margin组件间距
- padding内容和组件边界间距
-
方法
- setId
- setLayoutParams
- setPadding
-
-
特定属性方法
- 原点在左上角 - <TextView andorid:id="@+id/tv_title" andorid:layout_width="200dp" andorid:layout_height="200dp" andorid:layout_margin="20dp" andorid:layout_garvity="center" andorid:garvity="center" andorid:padding="100dp" andorid:text="@string/app_name"andorid:textSize="20sp" andorid:textColor="@color/colorAccent" andorid:visible="visible" andorid:background="@color/colorPrimary"/>
高级UI组件viewgroup
- viewgroup可以包含view、viewgroup
常规UI实例和总结
2.布局
引入:单个view在UI界面的位置由什么决定
-
多个UI界面组成一个页面
- 大小
- 位置
- 层级
-
常见布局方式
-
LinearLout(线性:水平、垂直)
- andorid:orientation(布局内组件排列方向)
- andorid:layout_weight(组件大小权重)
- andorid:divider(布局内组件间分割线)
- andorid:showDividers(布局内组件间分割线位置)
- andorid:dividerPadding(布局内分割线padding)
-
RelativeLayout(相对布局,减少嵌套)
-
根据父容器定位
- andorid:layout_centerInParent(组件位于父容器中央位置)
- andorid:layout_centerHorizontal(组件位于父容器水平中央位置)
- andorid:layout_centerVertical(组件位于父容器垂直中央位置)
- andorid:layout_aligmParentTop(组件与父容器顶部对齐)
-
根据兄弟组件定位
-
andorid:layout_above(位于某个组件上部)
-
andorid:layout_alignTop(组件与某组件顶部对齐)
-
-
-
FrameLayout(层级布局)
- andorid:foreground设置前景图像(永远位于最上层,不会被覆盖)
- andorid:foregroundGravity
-
ConstraintLayout(约束组件位置)
- layout_constraintLeft_toLeftOf(组件左部与某组件左部对齐)
- layout_constraintBaseline_toBaselineOf(组件基线与某组件基线对齐)
- layout_constraintStart_toEndOf(组件首部与某组件尾部对齐)
-
3.渲染
how
-
布局加载
-
编写布局文件
-
注册Manifest
-
设置布局文件
-
setContentView
- 创建DecorView,由LayoutInflater来加载XML文件
-
-
布局解析
-
LayoutInflater
- LayoutInflater解析XML文件,生成View实例,添加到ViewGroup
-
createView
-
找view,将XML中的描述属性解析为AttributeSet,作为第二个参数传给view构造器
-
-
-
页面绘制
-
Activity在onResume()之后才显示
-
ViewRootImpl.requestLayout()触发页面绘制
-
Measure
-
Layout
-
Draw
-
-
-
UI渲染
- VSnyc信号
4.交互
例子
-
1.获取View实例
- findViewById
-
2.添加相应监听器
-
常用交互事件监听器
- onClick()
- onLongClick()
- onFocusChange()
- onKey()
- onTouch()
-
触摸事件MotioEvent
-
交互事件来自于对屏幕触摸信号的处理
- ACTION_DOWN
- ACTION_MOVE
- ACTION_CANCEL
- ACTION_POINTER_DOWN(多点触碰)
-
捕获触碰事件
- onTouchEvent()
-
触摸事件分发
- boolean dispatchTouchEvent(MotionEvent ev)事件分发
- boolean onInterceptTouchEvent(MotionEvent ev)事件拦截
- boolean onTouchEvent(MotionEvent ev)事件响应
-
事件响应
- ACTION_UP处理,ACTION_DOWN判断
-
-
5.动画
帧动画(连续动画(定格动画))
- view视图控件
补间动画
-
view
-
透明度、旋转、缩放、平移
- 只需确定开始和结束画面
-
属性动画
- view属性可变,任意Java对象
6.自定义UI(补充)
复写
- onMeasure
- onLayout
- onSizeChanged
绘制view
-
paint
- setStyle
- setStrokeWidth(设置线条宽度)
- setAntiAlias(设置抗锯齿开关)
-
canvas
- drawRect(绘制矩形)
- drawBitmap(绘制图片)
一、dp(dip device independent point)
基于密度的抽象单位。在每英寸160点的显示器上,1dp = 1px
二、sp(scaled pixels)
主要用于字体显示,和dp类似,和刻度无关的一种像素。区别是sp会根据用户调节的字体大小改变。