View知识点总结

自定义View基础

View构造函数

View Measure过程

View Layout过程

View Draw过程

封装View的时候怎么知道view的大小

如何优化自定义View

为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。

你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。如果可能的话,尽量调用含有4个参数的invalidate()方法而不是没有参数的invalidate()。没有参数的invalidate会强制重绘整个view。

另外一个非常耗时的操作是请求layout。任何时候执行requestLayout(),会使得Android UI系统去遍历整个View的层级来计算出每一个view的大小。如果找到有冲突的值,它会需要重新计算好几次。另外需要尽量保持View的层级是扁平化的,这样对提高效率很有帮助。

如果你有一个复杂的UI,你应该考虑写一个自定义的ViewGroup来执行他的layout操作。与内置的view不同,自定义的view可以使得程序仅仅测量这一部分,这避免了遍历整个view的层级结构来计算大小。这个PieChart 例子展示了如何继承ViewGroup作为自定义view的一部分。PieChart 有子views,但是它从来不测量它们。而是根据他自身的layout法则,直接设置它们的大小。

自定义View如何考虑机型适配

外部引用时限定大小,内部自定义view时,动态计算所需长度,避免使用固定值,使用屏幕像素密度计算长度

自定义View的事件

Touch事件传递流程

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

点击事件被拦截,但是想传到下面的View,如何操作?

requestDisallowInterceptTouchEvent()

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

View刷新机制

View绘制流程

自定义控件原理,自定义View如何提供获取View属性的接口?

计算一个view的嵌套层级

View渲染

自定义View注意事项

invalidate和postInvalidate的区别及使用

微信主页面的实现方式

微信上消息小红点的原理




LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。

RecycleView的使用

Requestlayout,onlayout,onDraw,DrawChild区别与联系

RecycleView原理

ListView重用的是什么?

ListView 中图片错位的问题是如何产生的?

Recycleview和ListView的区别

RecyclerView和ListView的性能对比

ListView的优化

RecycleView优化

ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化?

https://stackoverflow.com/questions/19096868/how-can-make-my-viewpager-load-only-one-page-at-a-time-ie-setoffscreenpagelimit/44405015

介绍下SurfView

动态布局的理解

使用java代码或者xml在特定的情况下动态生成布局,例如金融申请页面就是用动态布局来通过后端配置来生成前端代码

深度分析invalidate postInvalidate  requestLayout




你可能感兴趣的:(Android)