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拦截事件并处理

上一篇下一篇

猜你喜欢

热点阅读