Android 在不扩展ViewGroup的情况下处理Intercept touch事件
我有一个Android 在不扩展ViewGroup的情况下处理Intercept touch事件,android,touch-event,ontouchlistener,Android,Touch Event,Ontouchlistener,我有一个RelativeLayout,这个布局有近10个视图 我已将OnTouchListener设置为此布局,并在其中执行一些操作,然后返回true 当我触摸没有视图的布局时,这个监听器工作得很好(在空白区域)。如果我触及此布局的子视图,则此侦听器不会触发 从文档中,我了解到我们可以通过扩展ViewGroup(这里是RelativeLayout)覆盖onInterceptTouchEvent(),并在子视图使用此事件之前处理触摸事件 这将起到一定的作用,但我需要修改许多需要此功能的xml文件,
RelativeLayout
,这个布局有近10个视图
我已将OnTouchListener
设置为此布局,并在其中执行一些操作,然后返回true
当我触摸没有视图的布局时,这个监听器工作得很好(在空白区域)。如果我触及此布局的子视图,则此侦听器不会触发
从文档中,我了解到我们可以通过扩展ViewGroup(这里是RelativeLayout)覆盖onInterceptTouchEvent(),并在子视图使用此事件之前处理触摸事件
这将起到一定的作用,但我需要修改许多需要此功能的xml文件,用CustomRelativeLayout替换RelativeLayout
所以我的问题是:
在
RelativeLayout
中的子视图使用事件之前,是否有任何方法处理RelativeLayout
(当然是视图组)的触摸事件?我不想扩展RelativeLayout
…尝试将onTouchListener添加到RelativeLayout
RelativeLayout rl = (RelativeLayout) findViewById( R.id.relativeLauout );
rl.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// do something
return false;
}
});
或者从活动中使用方法onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return super.onTouchEvent(event);
}
试图覆盖
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
属于活动
。
此方法是第一个处理触摸事件的方法。
但在这种情况下,您需要使用视图的当前坐标您只需在xml中设置:
android:clickable="true"
在处理
ACTION\u DOWN
事件时,尝试在子视图的onTouchEvent()方法中返回false。因此,转发触摸事件不会发送到子视图,也就是未使用的事件。虽然不一定是理想的,但对于没有动态内容的较小版面来说,这非常有效
在xml中,将android:clickable=“false”
设置为布局中视图组的所有子代(包括嵌套视图组及其子代)。然后,单击的每个子对象都会将单击传播到其父对象,最终到达ViewGroup的默认触摸处理程序。确保将要在其中获取单击事件的根视图组设置为android:clickable=“true”
或ViewGroup.setClickable(true)
如果动态添加视图,请确保调用view.setClickable(false)代码>在将其添加到视图层次结构之前。感谢您的回答。。。在问问题之前,我试过你的两种方法。。。但它不起作用:-(可以尝试扩展onTouchListener并将其设置为布局中的所有视图。没有这种方法:必须扩展RelativeLayout