2015-09-05 76 views
8

http://www.piwai.info/chatheads-basics/ 通过遵循这个良好的指南,我可以制作一个聊天头并检测触摸事件。
但是,如果我用第一根手指触摸聊天头,并尝试用第二根手指触摸聊天头的其他区域(外部),则无法进行第二次触摸。
(外部区域可以是主屏幕或其他应用程序的活动)
同样,如果我第一次触摸外部,并尝试用第二根手指触摸聊天头,则不可能。
我试过与facebook messenger chathead进行类似的交互,它也是一样的。Android ChatHead仅限于触摸本身,但我需要第二个手指同时触摸第二个触摸区域外的区域,

我的问题是:是否可以支持第二次触摸?
也许使用调度触摸事件?但afaik调度仅适用于活动。
聊天头使用服务和窗口。

任何帮助将深表感谢!

+0

请发布您的相关代码。 –

+0

该代码是我发布的链接,基本上我只是使用相同的代码。 http://www.piwai.info/chatheads-basics/ – tcboy88

+0

这是一个指南......这不是你的代码。顺便说一句...为什么用户想同时触摸聊天头和其他东西?这是一个非常糟糕的用户体验。 –

回答

1

如果底层视图来自完全不同的层次结构,则无法使用手动添加到WindowManager的布局作为系统重叠的布局。

一旦你开始对第一视图中的触摸事件,所有后续的触摸事件将会直到所有MotionEvent s为成品发送到同一个视图层次结构(即ACTION_UP或发生ACTION_CANCEL)。基本上,一旦你与一个视图相互作用,任何外部接触都被解释为触及当前层次之外的接触,并忽略任何可能或不可能占据相同屏幕位置的基础视图层次。

+0

是否可以检查触摸外部位置?并使用某种调度触摸事件或注入触摸事件发送到下面的活动?我有root并使用arom(rom确切地说是CM12.1),所以权限不是问题。 – tcboy88

+0

在这种情况下,不可能找出触摸下方的视图,更不用说发送触摸了。 –

2

是的,它可能使用以下解决方法。

  • 围绕您的聊天头有一个透明的布局。
  • 这 透明布局将拦截触摸,你可以做必要的处理 。
  • 然后,您可以通过从OnTouchEvent()返回false将此触摸事件传递到层次结构/其他应用程序。

为了让其他应用程序处理触摸事件,透明视窗才能被激活时,用户已经触摸你中央社确保用户正计划做一些手势您chathead您chathead.This方式。

+0

你能提供概念验证样本吗?就像如何将触摸事件传递给层次结构一样?因为我的聊天头位于其他应用程序之上(不是我自己的活动) – tcboy88

+0

由于聊天头以外的视图不在同一层次结构中,因此无法在此情况下使用。 –

+0

@ KaneO'Riley ...我的意思是将事件传递给系统/其他应用程序。 –

相关问题