前言:
设置ScrollView不可滚动? 咋一听可能觉得很鸡肋,如果你不需要滚动,为什么要用ScrollView呢?
但是在需求越来越复杂的今天,有很多场景是完全需要用到的。比如你需要在一些情况下,开启滚动,在一些情况下又需要关闭滚动。
思路:
当然,ScrollView本身没有方法去关闭开启滚动。所以我们需要创建新的文件 ,继承ScrollView。 重写onTouchEvent(),
在触摸事件的根源禁止掉滑动。 当你给onTouchEvent() return true 的时候,它的触摸事件就不会往下传递了,而是被自身消费掉,所以自然就不会滚动了。 有了这个思路,代码就很容易写了。
代码:
**
* Created by Fushize on 2019/10/28.
*/
public class MyScrollView extends ScrollView {
private boolean scroll = true; //默认可以滑动
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//传入true可滑动,传入false不可滑动
public void setScroll(boolean scroll) {
this.scroll = scroll;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (scroll) {
return super.onTouchEvent(ev);
} else {
return true;
}
}
}
使用:
1.把MyScrollView替换掉你布局文件中的ScrollView
2.调用MyScrollView.setScroll(boolean); 其中,true可以滚动,false不可滚动。
注意,如果没有调用过这个方法,这个MyScrollView默认是可以滚动的。