ListView学习


更新:2017-1-28 理解一


概述

其中在自定义ListView中涉及到如何动态加载布局,即XML流→实例化布局得到View对象,便于实现该布局中的各个控件。

以及:

ListView工作原理

ListView性能优化


理解一、Android视图绘制流程

onMeasure()具体步骤:

http://blog.csdn.net/u013480581/article/details/54783399
更新:2017-1-30


onLayout()具体步骤:

  1. ViewRoot的performTraversals()方法会在measure结束后继续执行,并调用View的layout()方法。

    • 实现host.layout(0, 0, host.mMeasuredWidth, host.mMeasuredHeight); 四个参数,分别代表着左、上、右、下的座标(相对于当前视图的父视图而言),其中measure中测量得到的宽度和高度
  2. layout()方法,首先会调用setFrame()方法来判断视图的大小是否发生过变化,需不需要重绘

  3. layout()方法onLayout(changed, l, t, r, b)方法回调
    • View中的onLayout()方法就是一个空方法
    • ViewGroup中的onLayout()方法竟然是一个抽象方法protected abstract void onLayout(boolean changed, int l, int t, int r, int b);
    • ViewGroup的子类都必须重写这个方法。LinearLayout和RelativeLayout在内部按照各自的规则对子视图进行布局

getWidth()方法和getMeasureWidth()方法的区别

  • getMeasureWidth()方法在[1.4]measure()过程结束后就可以获取到了,而getWidth()方法要在[2.1]layout()过程结束后才能获取到。
  • getMeasureWidth()方法中的值是通过[1.7]setMeasuredDimension()方法来进行设置的,而getWidth()方法中的值则是通过视图右边的座标减去左边的座标计算出来的。

onDraw()具体步骤:

具体见:(引用)http://blog.csdn.net/xx326664162/article/details/49494207


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章