View相关知识
2019-12-16 本文已影响0人
梦里花落知多少_9ce8
获取View的宽高
(1)Activity/View onWindowFocusChanged
(2)view.post(runnable)
(3)ViewTreeObserver OnGlobalLayoutListener
View.getViewTreeObserver().addOnGlobalLayoutListener
(4)view.measure(int widthMeasureSpec,int heightMeasureSpec)
layout确定View本身的位置,OnLayout方法会确定所有子元素的位置
draw 过程
作用是将View绘制到屏幕上
(1)绘制背景backGround.draw(canvas)
(2)绘制自己(onDraw)
(3)绘制children(dispatchDraw)
(4)绘制装饰(onDrawScrollBars)
滑动冲突的解决方式
1.外部拦截法
指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要此事件就不拦截,这样就可以解决滑动冲突的问题,这种方法比较符合点击事件的分发机制。
重写父容器的onIntercptTouchEvent方法,返回true拦截
2.内部拦截法
指父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接 消耗掉,否则就交由父容器处理。
重写子元素的dispatchTouchevent()
parent.requestDisallowInterceptTouchEvent(true) 子view拦截事件并处理