ViewGroupOverlay 不显示视图

2024-04-01

我目前正在尝试创建一个益智游戏,其中有一个网格,每个单元格应该能够在触摸时显示视觉(并且仅视觉)指示。因此,我打算使用视图组叠加 https://developer.android.com/reference/android/view/ViewGroupOverlay.html(使用 getOverlay())带有自定义视图:

In each CellView

 @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View myView = inflater.inflate(R.layout.overlay, null);
            gridView.getOverlay().add(myView);
        }
        if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
            gridView.getOverlay().clear();
        }
        return super.onTouchEvent(event);
    }

其中 'gridView' 是父级(一个包含 GridLayout 的 FrameLayout,该 GridLayout 包含多个 Cells 视图(即relativelayout));)。但我认为这并不重要...

而目前对于概述.xml(只是虚拟代码)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#dddd090d">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Test" />

</LinearLayout>

遗憾的是,覆盖视图没有出现在任何地方。

However,如果我尝试一下带有可绘制的以及“onTouchEvent”中的以下代码,it works...但我需要视图而不是可绘制的工作...

Drawable myIcon = getResources().getDrawable(R.drawable.overlay);
myIcon.setBounds(0,0,100,100);
gridView.getOverlay().add(myIcon);

一般来说,API18中添加的Overlay技术似乎从未被使用过。这里有专家吗?


ViewGroupOverlay不对添加到其中的视图执行布局传递;也就是说,在现有布局中添加View时会自动执行,您需要手动执行measure() and layout()以便在屏幕上正确显示视图。

您的代码与 Drawable 一起使用的原因是因为您正在执行布局步骤myIcon.setBounds(0,0,100,100);

如果您使用此代码,您将获得与 Drawable 相同的效果:

    View view = inflater.inflate(R.layout.overlay, null);
    view.measure(View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY));
    view.layout(0, 0, 100, 100);
    gridView.getOverlay().add(view);

您可以在此处阅读有关度量/布局的更多信息:https://developer.android.com/guide/topics/ui/how-android-draws.html https://developer.android.com/guide/topics/ui/how-android-draws.html

您可以使用此辅助方法来显示视图,就好像它已添加到空的全屏中一样:

private static void measureAndLayout(Activity activity, View toMeasure, int statusBarHeight) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

    toMeasure.measure(
            View.MeasureSpec.makeMeasureSpec(displayMetrics.widthPixels, View.MeasureSpec.EXACTLY) ,
            View.MeasureSpec.makeMeasureSpec(displayMetrics.heightPixels - statusBarHeight, View.MeasureSpec.EXACTLY));

    toMeasure.layout(0, statusBarHeight, displayMetrics.widthPixels, displayMetrics.heightPixels);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewGroupOverlay 不显示视图 的相关文章

随机推荐

  • AttributeError:尝试使用 writerow 时“str”对象没有属性“keys”

    尝试写一个pythonscraper that scrapes从网页到csv文件的数据 如果删除 dataFrameCleaned cleanDataUp dataFrame 行 也尝试改变我编写 python 文件的方式 csvData
  • Node.js 中的每个请求日志记录

    我是一位经验丰富的 Java 开发人员 开始学习 Node js 并转向异步模型 除了日志记录之外 大多数事情都进展顺利 在使用 Express 在 Node js 中进行开发时 我在 Java 中找不到类似于 log4j 和 NDC 的任
  • React router v4 - 如何访问通过重定向传递的状态?

    我正在 React 的帮助下制作一个登录页面 当登录成功时 该页面会重定向到另一个页面 让我将登录成功时渲染的组件称为 A 我想将从数据库获取的数据传递给组件 A 我通过将其传递到 重定向 组件的 状态 属性来实现此目的 但是 我不明白如何
  • 通过计算属性来推断 OWL 中的知识

    我有一个包含 Person 和 City 类的本体 人们前往城市旅行 这种旅行在 TravelTo 对象属性中表示 我想添加一个 WorldTraveler 类 如果人们去过两个或更多城市 那么他们就是世界旅行者 我怎样才能在我的本体中做到
  • 调试 SharePoint 2007 代码

    如何调试 SharePoint 2007 代码 由于 SharePoint 在远程服务器上运行 而我正在 Windows XP 计算机上进行开发 将必要的 dll 文件复制到我的 GAC 中 因此我没有找到简单的调试方法 断点不起作用等等
  • 用于从逗号分隔列表中删除电子邮件地址的 PHP 脚本 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我运行一个小型网站 我的用户要求我建
  • 让 IE 停止将 ajax 视为跨域(在 iframe 内)

    我有以下设置 www domain1 com page1 发出 ajax POST 请求www domain1 com page2 www domain1 com page2 返回 json 响应 www domain2 com page1
  • Python scipy.optimise.curve_fit 给出线性拟合

    我在使用 scipy 的 curve fit 参数时遇到了一个问题 我最初复制了文档建议的代码 然后我稍微改变了方程 效果很好 但是增加了 np linspace 整个预测最终变成了一条直线 有任何想法吗 import numpy as n
  • 计算以符号开头的行数

    有很多行包含 gt 文件中的符号 如何计算总数 gt 文件中的符号 我努力了sed and grep但它不起作用 您可以将 GNU grep 与wc grep o gt file txt wc l grep o将每个匹配项打印在单独的行上
  • 在 ASP.NET Core 中禁用分块

    我正在使用 ASP NET Core Azure Web 应用程序向客户端提供 RESTful API 但客户端无法正确处理分块 是否可以完全关闭Transfer Encoding chunked 无论是在控制器级别还是在文件中网络配置 我
  • HttpWebRequest 服务器不可用 503 问题

    我最初使用 WebRequest 和 WebResponse 来发送 Http Post 消息 我总是得到 好的 答复 我发布的消息是一个用 xml 中的证书签名的 XML 组成是这样的 发送到 https 网站的 C 服务 HTTPS 网
  • 查找子集合不包含项目的所有项目

    Given public class Order public string Name get set public List
  • Google App Engine 数据存储区数据隐私

    我正在使用 Google App Engine 和 Datastore 那里正在发生非常奇妙的事情 但我忍不住想知道 Google 可以如何处理我的应用程序存储在数据存储区中的数据 有人可以用简单的话解释一下吗 Thanks Google
  • 如何使用mapStruct映射用@XMLSeeAlso注释的JAXB元素?

    我正在尝试映射一个 bean 该 bean 具有一些 JAXB 元素 如 XmlSeeAlso XmlElement XmlSchemaType 作为该类的属性 XmlAccessorType XmlAccessType FIELD Xml
  • JoinQueryOver 和 JoinAlias 有什么区别?

    我需要知道 JoinQueryOver 和 JoinAlias 之间有什么区别 以及何时使用它们 从功能上来说 它们做同样的事情 创建与另一个实体的连接 唯一的区别是它们返回的内容 JoinQueryOver 返回一个新的 QueryOve
  • Java 整数比较两个整数时返回奇怪的结果?

    Integer i1 new Integer 9 Integer i2 new Integer 9 if i1 i2 System out println true else System out println false int i3
  • Rails 3 中的移动风格切换,辅助方法与媒体查询

    我正在研究为移动应用设计 Rails 应用程序样式的方法 这个想法很常见 为移动浏览器使用一组样式 为传统浏览器使用另一组样式 据我所知 Rails 中有两种基本方法可以做到这一点 使用辅助方法来检测用户代理 然后执行切换 应用程序控制器
  • Stackdriver Logging API 返回响应代码 200,但响应为空

    我正在尝试通过 Stackdriver Logging API v2 获取 stackdriver 日志 我通过从 google apps 脚本项目发出 POST 请求来实现此目的 特别是使用 UrlFetchApp 问题是 它运行成功 但
  • 在 AWS ebextensions 中执行命令

    我在尝试在 aws elasticbeanstalk 中上传实例时收到以下错误 The configuration file ebextensions setup config in application version t5 conta
  • ViewGroupOverlay 不显示视图

    我目前正在尝试创建一个益智游戏 其中有一个网格 每个单元格应该能够在触摸时显示视觉 并且仅视觉 指示 因此 我打算使用视图组叠加 https developer android com reference android view View