获取view的宽高属性
View.getMeasuredWidth() //获取测量的宽高
View.getLayoutParams().width //通过xml布局文件layout属性,来获取宽高属性
View.getWidth() //获取测量好的宽高
使用时机
View.getMeasuredWidth() //onMeasure()方法之后(包含此方法)
View.getLayoutParams().width //onMeasure()方法之后(包含此方法)
View.getWidth() //onSizeChanged()方法之后(包含此方法)
些许bug
View.getMeasuredWidth() //一般情况下测量很准确,但是如果view最外层的xml有background背景图片,系统测量时会参考background图片的大小,可能会造成测量不准确
View.getLayoutParams().width //xml没有明确的dp值,根据属性可能有值: -1(LayoutParams.MATCH_PARENT=-1),-2(LayoutParams.WRAP_CONTENT=-2)
View.getWidth() //一般没有坑
View.getLayoutParams()
onFinishInflate()执行时,还未载入xml布局文件,此时调用View.getLayoutParams()会造成空指针异常
View.getLeft()
View.getLeft()参照最近一次layout()布局,如果布局不变,使用scrollTo()方法移动view,系统也判定view的布局未改,View.getLeft()值也不变
scrollTo()
此方法并不真正改变view的layout(left,top,right,buttom)布局,只是让我们看到view能够移动,在系统中view的布局不变
onLayout()
此方法一般被调用2次
recyclerView条目要使用一下方式解析xml布局,否则最外层的控件宽度高度不生效
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);
事件传递至少应当有 ACTION_DOWN
MotionEvent传递 ACTION_DOWN ACTION_MOVE
MotionEvent传递 ACTION_DOWN
MotionEvent传递 ACTION_DOWN ACTION_MOVE