复习:自定义view需要注意什么

73 阅读1分钟

自定义View须知

1. 让View支持wrap_content

直接继承View或者ViewGroup的控件,如果不在onMeasure中队wrap_content做特殊处理,那么当外界在布局中使用warp_content时就无法达到预期效果。

2. 如果有必要,让View支持padding

直接继承View的控件,如果不在draw方法中处理padding,那么padding属性是无法起作用的。

直接继承自ViewGroup的控件需要在onMeasure和onLayout中考虑padding和子元素的margin对其造成的影响,不然将导致padding和子元素的margin失效。

3. 尽量不要在View中使用Handler

View内部本身提供了post系列的方法,完全可以替代Handler的作用,当然除非很明确地要使用Handler来发送消息。

4. View中有线程或者动画,需要及时停止

如果有线程或者动画需要停止时,可以在onDetachedFromWindow中停止。

当包含此View的Activity退出或者当前View被remove时,View的onDetachedFromWindow方法会被调用,和此方法对应的是onAttachedToWindow,当包含此View的Activity启动时,View的onAttachedToWindow方法会被调用。同时,当View变得不可见时,我们也需要停止线程和动画,如果不及时处理,可能会造成内存泄漏。

5.View带有滑动嵌套情形时,需要处理好滑动冲突。
6. 不要在onDraw方法中创建新的局部对象

onDraw方法可能会被频繁的调用,这样就会在一瞬间产生大量的临时对象,不仅占用了过多的内存而且还会导致系统更加频繁gc,降低程序的执行效率。

7. 不能在onDraw方法中执行耗时