将触摸事件委托给另一个视图
Posted
技术标签:
【中文标题】将触摸事件委托给另一个视图【英文标题】:Delegate touch event to another view 【发布时间】:2015-01-30 10:19:46 【问题描述】:我有列表视图。用户可以在覆盖此列表视图的全屏Window.FEATURE_NO_TITLE)
上打开对话框。当用户触摸此对话框的背景时,它会关闭。
我需要将此触摸事件委托给列表视图。我的意思是,在 bg 上的 MotionEvent.ACTION_DOWN
之后,我需要关闭对话框(它工作正常),然后在列表视图上启动 MotionEvent.ACTION_DOWN
。
我尝试过这样的事情:
((LinearLayout) findViewById(R.id.dialog_bg)).setOnTouchListener(new View.OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
switch (event.getAction())
case MotionEvent.ACTION_DOWN:
MotionEvent motionEvent = MotionEvent.obtain(event);
activity.findViewById(R.id.fr_projects_list).dispatchTouchEvent(motionEvent);
close();
break;
default:
break;
return false;
);
它在列表视图中以 ACTION_DOWN
开头。但仅此而已。 ACTION_MOVE 和其他不起作用 =/
【问题讨论】:
【参考方案1】:您只发送 ACTION_DOWN
这就是为什么您没有收到任何其他操作。
尝试调度所有操作。
((LinearLayout) findViewById(R.id.dialog_bg)).setOnTouchListener(new View.OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
MotionEvent motionEvent = MotionEvent.obtain(event);
activity.findViewById(R.id.fr_projects_list).dispatchTouchEvent(motionEvent);
if(event.getAtction==MotinEvent.ACTION_UP) close();
return false;
);
【讨论】:
在我进行触摸事件后,我关闭对话框。所以在那之后对话上不会有其他事件。我应该处理列表视图的事件。 @Suvtruf 我更新了我的答案。试一试.. 仅当操作为 ACTION_UP 时才调用 Close 客户希望在 ACTION_DOWN 时关闭对话框,而不是 ACTION_UP。这不是我的选择)= 好吧.. 我猜如果你在 ACTION_DOWN 上关闭对话,那么默认情况下应该在 ListView 上调用另一个事件。尝试将 touchlistner 设置为您的列表视图。我不是 100% 确定,但你可以试试。 这很有帮助,但如果目标视图有边距,它不能 100% 工作,那么克隆的触摸会有点错位。对这个问题有帮助吗?以上是关于将触摸事件委托给另一个视图的主要内容,如果未能解决你的问题,请参考以下文章