android – 如何拦截所有触摸事件?

前端之家收集整理的这篇文章主要介绍了android – 如何拦截所有触摸事件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何获得应用程序的“顶级”视图(包含Activity和所有DialogFragments)?我需要拦截所有触摸事件来处理DialogFragment和我的Activity之间的某些View的动作.

我试图通过活动窗口的装饰视图抓住它们(事件)而没有运气:

getWindow().getDecorView().setOnTouchListener(...);

解决方法

您可以覆盖 Activity.dispatchTouchEvent拦截活动中的所有触摸事件,即使您有一些将消耗触摸事件的ScrollView,Button等视图.

结合使用ViewGroup.requestDisallowInterceptTouchEvent,您可以禁用ViewGroup的触摸事件.例如,如果要禁用某些ViewGroup中的所有触摸事件,请尝试以下操作:

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    requestDisallowInterceptTouchEvent(
            (ViewGroup) findViewById(R.id.topLevelRelativeLayout),true
    );
    return super.dispatchTouchEvent(event);
}

private void requestDisallowInterceptTouchEvent(ViewGroup v,boolean disallowIntercept) {
    v.requestDisallowInterceptTouchEvent(disallowIntercept);
    int childCount = v.getChildCount();
    for (int i = 0; i < childCount; i++) {
        View child = v.getChildAt(i);
        if (child instanceof ViewGroup) {
            requestDisallowInterceptTouchEvent((ViewGroup) child,disallowIntercept);
        }
    }
}

猜你在找的Android相关文章