如何与半透明Android应用程序背后的元素进行交互?

时间:2012-07-24 17:13:27

标签: android

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

This post帮助我让应用视图变得半透明。

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

3 个答案:

答案 0 :(得分:13)

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

可见性

  • 当您打开书籍时,您可以看到一个页面(主视图 - VISIBLE
  • 当您翻开当前页面时,您可以看到下一页(INVISIBLE - 主视图以显示下一个视图。请记住,如果您将可见性设置为GONE,则只隐藏视图相当于撕毁当前页面以查看下一页。)

触摸场景

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

不要灰心,因为这是一个你要处理的观点,而不是你仍然可以做你想做的纸张。)

  • 为您的两个观点实施View.OnTouchListener
  • 对于您获得的任何触摸事件的半透明视图,请在方法FALSE
  • 中返回onTouch
  • Android会将触摸事件传递给您的基础视图。

答案 1 :(得分:12)

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

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

答案 2 :(得分: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),允许将窗口外部的任何指针事件发送到其后面的窗口。否则会   消耗所有指针事件本身,而不管它们是否   在窗口内部。