How to transfer touch events to the view beneath in a RelativeLayout?
android, android-scrollview, events, touch
Solution
Try to implement your own `ScrollView` which has a flag to indicate the status(disabled/enabled) and also overrides the `onTouchEvent` and `dispatchTouchEvent` to let the touch events get pass the `ScrollView`. Here is an example:
public class DisabledScrollView extends ScrollView {
private boolean mIsDisable = false;
// if status is true, disable the ScrollView
public void setDisableStatus(boolean status) {
mIsDisable = status;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// no more tocuh events for this ScrollView
if (mIsDisable) {
return false;
}
return super.onTouchEvent(ev);
}
public boolean dispatchTouchEvent(MotionEvent ev) {
// although the ScrollView doesn't get touch events , its children will get them so intercept them.
if (mIsDisable) {
return false;
}
return super.dispatchTouchEvent(ev);
}
}
Then all you have to do is change the value of that flag. See if it works.
Problem
I have a `ScrollView` on top of another view(with `Buttons`). The `ScrollView` is taking the whole screen and is obscuring the view that is beneath it. At some point in my app I need the `ScrollView` to be disabled (but still visible) and transfer all the touch events to the `Buttons` that are beneath the `ScrollView`. How can I do that? Some views like `Buttons` are automatically doing that when disabled but a `ScrollView` is not doing that.