我希望在我的申请之上有一个透明的视图 我想知道当前的活动,这样做 我找到了一种方法,通过windowManager添加一个新的framelayout 我这样做:
public static void AddViewAbove(Activity activity) {
FrameLayout newLayout = new FrameLayout(activity);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
// if I let WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
// then touchevent are passed to the application behind, but I cant handle touch in
// my new frameLayout
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
activity.getWindowManager().addView(newLayout , lp);
}
我现在的主要问题是我无法在我的新FrameLayout中正确地接收touchevent,同时在我的视图后面的应用程序中也是如此。
答案 0 :(得分:2)
尚未测试过。但这个想法是你需要通过触摸事件来解决问题。由于假设您的顶级(实际上是顶部)视图处理了该事件,您可能需要将透明framelayout设置为 NOT 处理触摸事件(以及其他事件,如果适用)。
==更新==
您应该继承FrameLayout并创建自己的透明布局。然后指示它监视并绕过触摸事件。 Reference
实施此方法以拦截所有触摸屏动作事件。这允许您在将事件发送给您的孩子时观察事件,并在任何时候获取当前手势的所有权。使用此函数需要注意,因为它与View.onTouchEvent(MotionEvent)的交互相当复杂,并且使用它需要以正确的方式实现该方法以及此方法。活动将按以下顺序收到:
- 您将收到此次活动。
- down事件将由此视图组的子进程处理,或者由您自己的onTouchEvent()方法处理;这意味着你应该实现onTouchEvent()以返回true,这样你将继续看到手势的其余部分(而不是寻找父视图来处理它)。此外,通过从onTouchEvent()返回true,您将不会在onInterceptTouchEvent()中收到任何后续事件,并且所有触摸处理必须像on normal一样在onTouchEvent()中进行。
- 只要你从这个函数返回false,每个后续事件(包括最后一个)将首先在这里传递给目标的onTouchEvent()。
- 如果从此处返回true,则不会收到任何后续事件:目标视图将收到相同的事件,但行动为ACTION_CANCEL,所有其他事件将传递给您的onTouchEvent()方法,此处不再显示。
醇>
== UPDATE ==
顺便说一下,您应该使用自定义的framelayout(或其他适合您的布局)来“抓住”另一个孩子。我建议您可以将其用作根布局。