常规&高级UI编程|青训营笔记

111 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第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会根据用户调节的字体大小改变。

插值器(控制中间画面):初始值过渡到结束值的速度等等