14

我已经找到了如何为我的 android 应用程序创建半透明背景,但到目前为止我还没有找到如何与它背后的内容(例如主屏幕)进行交互。

这篇文章帮助我使应用程序视图半透明。

如何让用户与半透明应用程序背后的内容进行交互? 这个应用程序是一个很好的例子,它允许这是“透明屏幕”Android 应用程序。

4

3 回答 3

13

理解视图堆叠的一个非常简单的方法是拿一本书(任何书)。将每个页面视为一个视图。

能见度

  • 当您打开这本书时,您可以看到一个页面(主视图 - VISIBLE
  • 翻到当前页面可以看到下一页( INVISIBLE- Main View 显示下一个视图。记住你只是隐藏视图,如果你设置可见性到GONE这里就相当于撕掉当前页面来查看下一页.)

触控场景

  • 假设您的第一页是蜡页(类似于您的半透明视图的半透明页面),因此您可以看到底层页面
  • 当您尝试触摸第二页上的图形时,尽管您可以在第二页上看到图形,但您正在触摸第一页。不可能通过第一页触摸到第二页上的图形。

不要灰心,因为这是您将要处理的观点而不是论文,您仍然可以做您想做的事情:)

  • View.OnTouchListener为您的两个视图实施
  • 对于半透明视图您获得的任何触摸事件,请FALSE在方法中返回onTouch
  • Android 会将触摸事件传递给您的底层视图。
于 2012-07-24T17:29:59.153 回答
12

我得到了答案。getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 在第二个顶级活动的 onCreate 中添加行(这是透明的)。

上面的解决方案有问题。使用以上整个窗口后,将触摸传递到背景。因此,如果您想要完全控制,那么最好扩展一个布局,例如 Framelayout 并覆盖“onTouchEvent”,并使用 event.getX() 和 event.getY() 方法获取触摸位置,并在您想要传递触摸事件的地方返回 false。它将被传递给父视图。

于 2013-11-12T09:33:28.307 回答
0

FLAG_NOT_TOUCH_MODAL会用最少的代码做你想做的事。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    ...
    setContentView(R.layout.my_activity_view);
    ...
}

公共静态最终 int FLAG_NOT_TOUCH_MODAL

窗口标志:即使此窗口可聚焦(其 {@link FLAG_NOT_FOCUSABLE 未设置),也允许将窗口外的任何指针事件发送到其后面的窗口。否则它将消耗所有指针事件本身,无论它们是否在窗口内。

于 2018-11-05T03:12:06.160 回答