day38 自定义view,自定义属性以及view绘制流程,touch事件分发

自定义view,自定义属性简介

  1. 什么是自定义view?
    在系统原有控件基础上进行二次的修改以及添加。
  2. 哪里使用自定义view?
    当系统原生控件无法满足用户需求时,基于系统原生控件进行二次修改如上下拉刷新等UI效果
  3. 如何使用自定义view
    编写外部类继承自view
    重写构造方法
    在xml中引用
  4. 自定义属性?
    res的values目录下的attrs.xml文件中(没有就自己新建一个),使用< declare-styleable>标签自定义属性
    属性值的类型format
    reference:参考某一资源ID 如background
    color:颜色值
    boolean:布尔值
    dimension:尺寸值
    float:浮点值
    integer:整型值
    string:字符串
    fraction:百分数
    enum:枚举值
    < attr
    name=“orientation”>
    < enum
    name=“horizontal” value=“0” />
    < enum
    name=“vertical” value=“1” />
    < /attr>
    flag:位或运算
    < attr
    name=“gravity”>
    < flag
    name=“top” value=“0x30” />
    < flag
    name=“bottom” value=“0x50” />
    < flag
    name=“left” value=“0x03” />
    < flag
    name=“right” value=“0x05” />
    < flag
    name=“center_vertical” value=“0x10” />
    < /attr>
    混合类型:属性定义时可以指定多种类型值
    < attr name =
    “background” format = “reference|color” />
    TypedArray array =
    context.obtainStyledAttributes(attrs,R.styleable.MainView);载入要读取的自定义属性
    array.getString(R.styleable.MainView_str)获取属性
    array.recycle()释放

https://blog.csdn.net/wdd1324/article/details/73176141

view绘制流程

View绘制流程?
onMeasure:测量自定义view的大小
onLayout:布局 自定义view中包含的子元素
onDraw:绘制
MeasureSpec,它是View的一个内部类,它表示对View的测量规格。MeasureSpec代表一个32位int值,高2位代表SpecMode(测量模式),低30位代表SpecSize(测量大小)
UNSPECIFIED 模式: 父View不对子View有任何限制,子View需要多大就多大
EXACTYLY 模式:父View已经测量出子Viwe所需要的精确大小,这时候View的最终大小就是SpecSize所指定的值。对应于match_parent和精确数值这两种模式
AT_MOST 模式: 子View的最终大小是父View指定的SpecSize值,并且子View的大小不能大于这个值,即对应wrap_content这种模式

touch事件分发

  1. 什么是touch事件?
    一个Touch事件在用户点击屏幕(ACTION_DOWN)时产生,抬起手指(ACTION_UP)时结束,而Touch事件又被封装到MotionEvent当中。
  2. Touch事件传递?
    dispatchTouchEvent:分发方法->接收父容器分发下来的touch事件
    onInterceptTouchEvent:拦截方法->拦截tou事件
    onTouchEvent:处理方法->处理touch事件

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值