Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-11-19:谈一谈自定义View和自定义ViewGroup?

MoJieBlog opened this issue · comments

  • onMeasure
  • onDraw
  • dispatchDraw
  • onLayout
  • ......

onMeasure
onDraw
dispatchDraw
onLayout
onKeyDown()

为什么现在问题都莫得解答了?

commented

为什么现在问题都莫得解答了?

@Squirtle12
可能是因为回答的质量层次不齐,有的是直接从网上复制过来的,
阅读者无从分辨哪一个是相对正确的,or 讲的通俗易懂,
因此,也就无法给回答者以反馈,例如我给你的 +1,
也正因为这样,回答者没有反馈,时间久了,也就不贡献回答了。

这种问题就不好回答……
都知道要onMeasure测量尺寸、onLayout中layout到对应的位置,onDraw里面要注意减少对象创建……
但面试的时候这么答,屁用没有

为什么现在问题都莫得解答了?

@Squirtle12
可能是因为回答的质量层次不齐,有的是直接从网上复制过来的,
阅读者无从分辨哪一个是相对正确的,or 讲的通俗易懂,
因此,也就无法给回答者以反馈,例如我给你的 +1,
也正因为这样,回答者没有反馈,时间久了,也就不贡献回答了。

说的很对,之前题目贡献者还会给出一个标准答案,现在也没有了。

这种问题就不好回答……
都知道要onMeasure测量尺寸、onLayout中layout到对应的位置,onDraw里面要注意减少对象创建……
但面试的时候这么答,屁用没有

em...回答这些现在确实比较难合格。而且我这里问的是自定义View和ViewGroup。更偏向于说他俩不同的地方,比如事件分发,比如onMeasure,onLayout,onDraw分别是如何处理的。比如那些方法是自定义ViewGroup有的,自定义View没有的。

自定义 View 
1.onMeasure()方法用于测量自己宽高,前提是继承View。如果继承系统已经有的控件比如TextView,Button等等 则不需要重写,因为系统已经给你计算好了。
2.onDraw()方法用于绘制自己想实现的样式。
3.onTouch()用于用户和控件的交互处理。

自定义 ViewGroup
1.onMeasure方法,for循环获取所有子view,然后根据子view的宽高来计算自己的宽高。
2.onDraw() 一般不需要,默认是不会调用的。如果需要绘制就要实现dispatchDraw()来进行绘制。
3.onLayout()用来摆放子view,前提view是可见
4.很多情况下不是不会继承ViewGroup的,一般都是继承系统控件。