问题描述
项目开发中,有一个页面的最外层是ScrollView,支持上下滑动。ScrollView的内部嵌套了一个跑马灯效果的TextView。当用户在滑动ScrollView时,会出现ScrollView自动跳到TextView的位置
解决方法
跑马灯效果的TextView在显示的时候需要执行requestFocus方法
获取焦点。ScrollView中有一个机制,如果ScrollView内布局产生变化就会滚动到获取焦点的View的位置。滚动到焦点View的距离是通过ScrollView的computeScrollDeltaToGetChildRectOnScreen
方法获取的。
所以我们只需要重写这个方法,改变它原有计算滑动距离的逻辑,直接返回0,这样当ScrollView内布局产生变化获取computeScrollDeltaToGetChildRectOnScreen
返回值进行滚动,拿到的值是0,也就不会滚动。
重写ScrollView的computeScrollDeltaToGetChildRectOnScreen方法
代码:
@Override
protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
return 0;
}