自定义view局部刷新_View

本文详细介绍了Android中自定义View的事件传递分发机制,包括Activity到View的事件传递流程、onTouch与onTouchEvent的区别、View和ViewGroup的事件分发回调方法。同时,讨论了View的刷新机制,如invalidate()和postInvalidate()的使用场景,以及View的绘制流程。最后,讲解了如何在自定义View中设置和获取属性。
摘要由CSDN通过智能技术生成

985cfedea3827dfb26ca1c921bc4f41f.png

一. 描述事件传递分发机制

Activity-->window-->顶级View(DecorView)-->ViewGroup-->View

dispatchTouchEvent

onInterceptTouchEvent 1.返回true拦截调用自己的false调用子类 2.View没有拦截方法

onTouchEvent 不消费则调用父类的onTouchEvent

requstDisallowInterceptTouchEvent子View干预父View

二. 事件分发中的onTouch和onTouchEvent有什么区别,该如何使用

onTouch方法优先级比onTouchEvent高,会先触发。假如onTouch方法返回false,会接着触发onTouchEvent,反之onTouchEvent方法不会被调用。内置诸如click事件的实现等等都基于onTouchEvent,假如onTouch返回true,这些事件将不会被触发。

三. View和ViewGroup分别有哪些事件分发相关的回调方法

ViewGroup

OndispathTouchEvent

OnInterceptTouchEvent

OnTouchEvent

View

OndispathTouchEvent

OnTouchEvent

View没有onInterceptTouchEvent

四. View刷新机制

在Android的View刷新机制中,父View负责刷新(invalidateChild)、布局(layoutChild)显示子View。而当子View需要刷新时,则是通知父View刷新子view来完成

invalidate()和postInvalidate() 的区别及使用

当Invalidate()被调用的时候,View的OnDraw()就会被调用;Invalidate()是刷新UI,UI更新必须在主线程,所以invalidate必须在UI线程中被调用,如果在子线程中更新视图的就调用postInvalidate()

postInvalidate()实际调用的方法,mHandler.sendMessageDelayed,在子线程中用handler发送消息,所以才能在子线程中使用

五. View绘制流程

Measure => setMeasuredDimension => onMeasure

onLayout

onDraw

六. 自定义View如何提供获取View属性的接口

  • 在res/values目录下新建一个attrs.xml文件

<declare-styleable name="CustomView">

<attr name="color" format="color"/>

<attr name="font" format="dimension"/>

</declare-styleable>

  • 使用自定义View 设置自定义属性
  • 构造函数中可以获取自定义属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值