Android-视图

114 阅读3分钟

记录

日期说明
2023/2/12首次创建

总纲

关于视图相关的概念

页面

window

decorView

inflate: 将xml反射生成view

View

重要属性

  • top, left, right, button
  • x, y
  • translationX, translationY
  • scaleX, scaleY
  • ...

重要概念

  • MotonEvent: 事件类型
    • ACTION_DOWN
    • ACTION_MOVE
    • ACTION_UP
    • ...
  • TouchSlop: 滑动的最小距离
  • VelocityTracker: 速度追踪
  • GestureDetector: 手势识别
  • Scoller: 弹性滑动对象

shapeDrawable

  • solid: 背景色
  • stroke: 边框粗细及颜色
  • padding: 边距
  • corners: 设置圆角
  • gradient: 渐变色
    • startcolor: 起始颜色
    • endcolor: 结束颜色
    • centercolor: 中心颜色
    • angle: 方向角度
    • type: 渐变类型

textView

  • 基础属性
  • 阴影: shadow
  • 图片: drawable
  • 链接: autoLink
  • 边框
  • HTML
  • 定制文本: SpannableString, SpannableStringBuilder
  • 跑马灯
  • 字间距和行间距
  • 自动换行

imageView

  • src与background
    • src指的是view内容。background指的是view背景
    • src填充图片时直接填充,不会拉伸。background会根据view的宽高进行拉伸
    • 透明度只对src有效
  • 设置缩放(scaleType)
  • imageButton
    • 和imageView的区别:imageView会按照具体的宽度尺寸发生变化,但是imageButton只会显示图片的原始像素大小
  • 代码设置图片
    • setImageResource, setImageUrl

button

  • checkBox: OnClickListner和OnCheckedChangeListener都可以响应点击,但是onCheckedChangeListener可以默认获取isCheck的状态
  • radioButton: radioGroup的onCheckedChangeListener可以默认获取checkedId
  • compoundButton
    • ToggleButton
    • Switch

editText

progressBar

  • 属性
    • max: 最大值
    • progress: 已完成的进度值
    • indeterminate: 进度条不精确显示进度
    • secondaryPregress: 二级进度条

scrolView

  • 隐藏滑块
  • 设置滑块图片
  • 滑动到底部/顶部

date/time

  • TextCheck
    • getFormat24Hour
    • getFormat12Hour
    • default

adapter

  • BaseAdapter
    • ArrayAdapter
    • SimpleAdapter
    • CursorAdapter
      • ResourceCursorAdapter
        • SimpleCursorAdapter
    • WrapperListAdapter
      • HeaderListAdapter

listView

  • 监听器
    • setOnScrollChangeListener
    • setOnScrollListener
    • setOnItemClickListener
  • 焦点问题
    • android:focusable
    • android:descendantFocusability
  • 修改了数据集之后需要调用notifyDataSetChanged更新
    • 无论是listVIew还是gridView,在更新了数据后都可以调用notifyDataSetChanged,原理是创建并注册一个数据集观察者,AdapterDataSetObserver,当数据发生变化时,观察者接到通知,会调用requestLayout更新界面
    • setAdapter与之相比,要先通过mRecycler.cler再赋予新的adapter,最终调用botainView重新绘制
  • RecyclerBin:通过维护下面6个数组,保证listView不会发生oom
    • private View[] mActiveViews = new View[0]
    • private ArrayList<View> mScrapViews
    • private ArrayList<View> mCurrentScrap
    • private ArrayList<View> mSkippedScrap
    • private SparseArray<View> mTranslentStateViews
    • private LongSparseArray<View> mTranslentStateViewById
      • mActiveViews和mScrapViews数组是用来存储复用的,其中mActiveVies中存储的是onScreen的View,这些可能直接被复用,mScrapViews存储的是OffScreen的View,这些是间接复用的
      • View的增删过程
        • ListView中的Children->RecycleBin
        • ListView清空children
        • RecycleBin->ListView的children

特殊的View

View工作原理

Drawable

动画

View动画

  • 动画效果
    • 平移动画:TranslateAnimation
    • 缩放动画:ScaleAnimation
    • 旋转动画:RotateAnimation
    • 透明度动画:AlphaAnimation
  • 定义动画
    • <set>标签表示动画集合,对应Animation类,可以包含若干个动画,也可以镶嵌其他动画合集
      • android:interpolator 插值器
      • android:shareINterpolator 表示集合内的动画是否和集合共享同一个插值器
      • android:duration 动画持续时间
      • android:fillAfter 动画结束后View是否停留再结束位置

帧动画

属性动画

  • 动画创建方式
    • ObjectAnimator
    • ValueAnimator
    • AnimatorSet
    • 通过xml文件设置
  • 插值器与估值器
    • LinearInterpolator(线性插值器,匀速动画)
  • 监听器
  • 解决方法

特殊动画

SBG动画

屏幕适配

dp方案

  • Android原生方案,与字体大小无关,与分辨率有关
  • 方案:用dp取代sp

宽高限定符适配

  • 方案:创建不同分辨率的values文件目录
  • 缺点:工作量大,需要精准适配到每一种分辨率

density适配

  • 方案:根据dpi/160的值改变density

smallestWidth适配

  • 方案:根据不同的横向dp值创建values目录,系统会根据屏幕真实宽度最接近原则进行匹配
  • 缺点:Android3.2以后引入