gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:18 24 4
gpt4 key购买 nike

我怎样才能得到我的应用程序的“顶部”View(其中包含 Activity 和所有 DialogFragment)?我需要拦截所有触摸事件以处理 DialogFragment 和我的 Activity 之间的某些 View 的运动。

我试图通过 Activity 的 Window 的装饰 View 捕捉它们(事件),但没有成功:

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

最佳答案

您可以覆盖 Activity.dispatchTouchEvent拦截您 Activity 中的所有触摸事件,即使您有一些 View (如 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 - 如何拦截所有触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com