记录
| 日期 | 说明 |
|---|---|
| 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
- ResourceCursorAdapter
- 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> mScrapViewsprivate ArrayList<View> mCurrentScrapprivate ArrayList<View> mSkippedScrapprivate SparseArray<View> mTranslentStateViewsprivate 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以后引入