我正在开发一个Android应用程序,它可以跟踪整个应用程序的触摸事件。为此,我想在没有活动的情况下覆盖onTouchEvent()
;也就是说,在一个简单的Java类中,我不知道它是否可能。欢迎任何想法。
答案 0 :(得分:0)
不,你不能随意覆盖onTouchEvent
,特别是在“简单的Java类”中,即不扩展View
的那个。
如果您要捕获应用的所有触摸,请覆盖主布局中的onInterceptTouchEvent()
。因此,如果您的主要布局是LinearLayout
,请执行以下操作:
public class MyTouchLayout extends LinearLayout {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Do whatever with your touch event
return false; // Do not prevent the rest of the layout from being touched
}
}
然后,在您的XML中,您将使用:
<com.example.MyTouchLayout
...
>
<!-- The rest of your layout -->
</com.example.MyTouchLayout>
这是迄今为止最简单的解决方案,虽然我过去运气不同,并且从不建议您回复它。
您只需获取包含所有内容的View
(根View
,上面有LinearLayout
),然后给它一个监听器。
View v = findViewById(android.R.id.content); // Find the root View; you may have to give it your own ID in the XML, and use that
v.setOnTouchListener(new OnTouchListener {
// ...
}