CrazyDailyQuestion
CrazyDailyQuestion copied to clipboard
2019-10-29: invalidate 和 requestLayout 的区别? scrollTo / scrollBy 和 computeScroll() 区别?
invalidate 和 requestLayout 的区别?
- invalidate 不会调用 viewGroup 的 invalidate 方法,但是会调用 viewGroup 的 draw 而调用子view 的 onDraw
- requestLayout 参与 view 的测量和布局,即 onMeasure 和 onLayout
scrollTo / scrollBy 和 computeScroll() 区别?
-
观察源码 发现 scrollTo 是 scrollBy具体实现,他们共同点都是参与
view
内容的移动,作用是为具体滑动控件设置位移偏值,如双击屏幕,实现scollview
置顶,需要注意的是,scrollTo参数为正值的时候,绘制的内容会负向移动。- 不同是,scrollTo是瞬时方法,不会自动使用动画,如果使用动画,需要配合.而scrollBy 是当前位移的增量偏移
-
computeScroll 在 view 重绘的时候一定会被调用
// onTouchEvent() 外: @Override
public void computeScroll() {
if (overScroller.computeScrollOffset()) { // 计算实时位置
scrollTo(overScroller.getCurrX(), overScroller.getCurrY()); // 更更新界⾯面
postInvalidateOnAnimation(); // 下⼀一帧
继续
} }