将 GestureOverlayView 添加到我的 SurfaceView 类,如何添加到视图层次结构?

2023-12-02

在后来的回答中我被告知,我必须将我在代码中创建的 GestureOverlayView 添加到我的视图层次结构中,但我并不 100% 知道如何做到这一点。以下是为了完整性而提出的原始问题。

我希望我的游戏能够识别手势。我有一个很好的 SurfaceView 类,我使用 onDraw 来绘制我的精灵,并且我有一个线程运行它来调用 onDraw 等。

这一切都很好。

我试图将 GestureOverlayView 添加到此,但它不起作用。终于破解到不会崩溃的地方,但这就是我所拥有的

public class Panel extends SurfaceView implements SurfaceHolder.Callback,         OnGesturePerformedListener  
{ 
public Panel(Context context)
{
    theContext=context;
    mLibrary = GestureLibraries.fromRawResource(context, R.raw.myspells);
    GestureOverlayView gestures = new GestureOverlayView(theContext);       
    gestures.setOrientation(gestures.ORIENTATION_VERTICAL);
    gestures.setEventsInterceptionEnabled(true);
    gestures.setGestureStrokeType(gestures.GESTURE_STROKE_TYPE_MULTIPLE);

    gestures.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT));

    //GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
    gestures.addOnGesturePerformedListener(this);
 }
 ...
 ...
 onDraw...
surfaceCreated(..);
...
...


public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
  ArrayList<Prediction> predictions = mLibrary.recognize(gesture);

  // We want at least one prediction
  if (predictions.size() > 0) {
   Prediction prediction = predictions.get(0);
   // We want at least some confidence in the result
   if (prediction.score > 1.0) {
    // Show the spell    
     Toast.makeText(theContext, prediction.name, Toast.LENGTH_SHORT).show();
   }
  }
 }


}

onGesturePerformed 永远不会被调用。他们的示例在 xml 中有 GestureOverlay,我没有使用它,我的活动很简单:

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    Panel p = new Panel(this);
    setContentView(p);
}

所以我在这里有点丢失丢失的信息,它没有调用 onGesturePerformed 并且漂亮的黄色“你正在画一个手势”永远不会出现。


这是一个很大的痛苦,但我终于找到了解决方案。网上绝对没有关于此的良好文档。我终于通过使用称为“FrameLayout”的东西,然后在其中添加表面视图和手势视图来使其工作。完成此操作后,即可将 FrameLayout 设置为内容视图。

不幸的是,由于某种原因,RomanGuy 提供的上述解决方案似乎不起作用(或者可能,我只是无法让它起作用)。有no .addView()函数可用于 SurfaceView 类,就像常规视图一样。该函数存在于 ViewGroups 中,并且可以很好地在除表面视图之外的任何内容上添加手势(我认为)。

您的 Activity 必须实现 OnGesturePerformedListener 接口才能正常工作。

您可以在我的网站上查看完整的教程和源代码:http://scanplaygames.com/?p=193

   package view.stack;

import game.core.GameView;

import java.util.ArrayList;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.Prediction;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.Toast;

public class GestureActivity extends Activity implements OnGesturePerformedListener 
{
    protected GameView surfaceView;
    protected GestureOverlayView gestureOverlayView;
    protected GestureLibrary mLibrary;
    protected FrameLayout frameLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        gestureOverlayView = new GestureOverlayView(this); 
        surfaceView        = new GameView(this);            
        frameLayout        = new FrameLayout(this);

        //gestureOverlayView.addView(surfaceView);    
        gestureOverlayView.setOrientation(gestureOverlayView.ORIENTATION_VERTICAL);
        gestureOverlayView.setEventsInterceptionEnabled(true);
        gestureOverlayView.setGestureStrokeType(gestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);

        mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
        gestureOverlayView.addOnGesturePerformedListener(this);

        frameLayout.addView(surfaceView, 0);
        frameLayout.addView(gestureOverlayView,1);

        setContentView(frameLayout);
    }

    @Override
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) 
    {
        // TODO Auto-generated method stub
        ArrayList<Prediction> predictions = mLibrary.recognize(gesture);

        // one prediction needed
        if (predictions.size() > 0)
        {
            Prediction prediction = predictions.get(0);

            // checking prediction
            if (prediction.score > 1.0) 
            {
                // and action
                Toast.makeText(GestureActivity.this, prediction.name,
                        Toast.LENGTH_SHORT).show();
            }
        }
    }    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 GestureOverlayView 添加到我的 SurfaceView 类,如何添加到视图层次结构? 的相关文章

  • Flutter :已处置的 CameraController,在已处置的 CameraController 上调用了 buildPreview()

    如何正确初始化和处理相机控制器 我在用camera 0 9 4 5 与许多人一起 其他错误 https stackoverflow com questions 70592464 flutter change the path of reco
  • PhoneGap/Cordova 应用程序通知

    我是 PhoneGap Cordova 的新手 我希望向我的应用程序添加一些通知 推送通知 因此当应用程序上发布新文章时 它会提醒用户 本地通知 在设定的时间间隔 日期和时间 我可以提示用户我的应用程序上的最新文章 我进行了大量搜索 但找不
  • 在 ChromeO 上安装未知来源的 apk

    我今天早上更新了我的 Chromebook Asus Flip 以获取 Play 商店 我的 Chromebook 安装了 M53dev 通道版本 它运作良好 我可以安装并运行从 Play 商店下载的 Android 应用程序 我想测试我的
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 需要 Android webview window.open() 和 window.close() 的信息

    我正在开发一个安卓应用程序 这是我网站的 WebView 该网站包含一个弹出按钮 单击该按钮后 将打开一个新窗口并显示内容 该链接可以来自外部站点 然而 当我实现此操作时 新选项卡正在打开 之后它会弹出以打开浏览器 尽管在 Web 视图中打
  • ExpandableListview OnGroupClickListener 未触发

    我正在关注这个 以编程方式折叠 ExpandableListView 中的组 https stackoverflow com questions 4314777 programmatically collapse a group in ex
  • Android上如何获取ImageView的Drawable的矩形?

    我想要获取将包裹 ImageView 的 Drawable 的矩形对象 而不是包裹 ImageView 的矩形 我将使用该矩形在 Drawable 周围绘制一些奇特的矩形 我怎样才能得到那个矩形 Rect rect new Rect Ima
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 选项卡主机内的 Android Fragment 视图状态 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Fragment 为 Android 中的每个选项卡单独的返回堆栈 https stackoverflow com questions 6987334 separate back stack f
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 无法使用 findViewById() 找到视图

    我找不到TextView通过致电findViewById 即使 ID 确实存在 OtherActivity public class OtherActivity extends Activity Override protected voi
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • jetpack compose 是否使用drawable-night 文件夹?

    我们有一个基于视图的 Android 应用程序 其中有一些可绘制对象res drawable文件夹 以及夜间模式的对应文件夹res drawable night folder 使用旧视图时 引用可绘制对象R drawable foo从 XM
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用

随机推荐

  • 动态创建/绘制图像以放入 Android 视图中

    我不确定我是否以 正确 的方式这样做 所以我也对其他选择持开放态度 这就是我想要实现的目标 我想要一个包含图表的视图 该图表应该由应用程序本身动态创建 图表应该是可缩放的 并且一开始可能会比屏幕大 800x600 左右 我打算从简单的开始
  • 如何在java中读取Doc或Docx文件? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想用java读取word文件 import org apache poi poifs
  • 现代 JVM 实现中,instanceof 是如何实现的?

    由于在其他线程中完成的基准测试 参见https stackoverflow com a 397617 1408611 结果表明 Java 6 中的 instanceof 实际上相当快 这是如何实现的 我知道 对于单继承 最快的想法是进行一些
  • 在 PyQt5 中停止工作线程中的无限循环最简单的方法

    我打算有一个 GUI 其中一个 后来是三个 线程以可调间隔 例如 10 秒 从不同源读取实时数据 并在主窗口中绘制这些数据 我正在使用 PyQt5 和 python 3 6 读取是在工作线程中无限循环中执行的 如下所示 class Read
  • 在 Objective-C 中使用内联汇编对变量进行 ROL / ROR

    我想对 Objective C 程序中的变量执行 ROR 和 ROL 操作 然而 我无法做到这一点 我不是装配专家 这是我到目前为止所做的 uint8 t v1 uint8 t v2 v2 is either 1 2 3 4 or 5 as
  • 更改用户控件的动画

    我有一个简单的自定义窗口 下面的 XAML 首次加载时 它将向 grdContainer Children 集合添加一个用户控件 用户选择 操作将导致其他用户控件添加 删除到子集合中 一次加载一个 我试图做的是在加载新控件时提供一个简单的动
  • 在 Python 中检测两个数据数组的模式

    我正在尝试从中检测模式开盘 高位 低位 收盘 OHLC 数据 所以这就是我所做的 查找数据集上的局部最小值和最大值 通过将局部最小值和最大值数组转换为数字数组来标准化我的数据 其中每个数字都是与前一点的变化 到目前为止 一切正常 但我陷入了
  • 在抛出 OutOfMemoryException 之前调用 GC.Collect

    有什么方法可以在抛出 OutOfMemoryException 之前调用 GC Collect 吗 我想我正在寻找一种方法来执行以下代码流 Try to Allocate Memory On Pass Return Call GC Coll
  • Jenkins 中字符串参数的存储库 URL

    我正在构建一个脚本化的 Jenkins 管道 Jenkins 文件是从 git 存储库中获取的 我想参数化存储库 URL 我创建了一个字符串参数 我尝试访问 存储库 URL 字段中的字符串参数 但不起作用 我收到错误消息 指出该参数不是可识
  • Bing 拼写检查 API 仅适用于英语

    Trying 必应拼写检查 API 但它似乎无法在英语以外的语言中正常工作 拼写检查可用的语言 我尝试检查法语文本 但结果实际上会建议完美文本中的错误 反之亦然 意味着它也不会纠正文本中的错误 我试过检查这段文字 土地是一个内部固体 这就是
  • string.ToLower() 和 string.ToLowerInvariant()

    有什么区别以及何时使用什么 如果我总是使用会有什么风险ToLower 如果我总是使用会有什么风险ToLowerInvariant 根据当前的区域性 ToLower 可能会生成您不期望的特定于区域性的小写字母 比如生产 nfoi 上没有点而不
  • Flask WTForms 在 validate_on_submit() 上总是给出 false

    我使用 wtforms 创建了一个注册表单 我在其中使用 FormField 这样我就不必再次重复表单的某些元素 但每当我单击 提交 按钮时 它总是在 validate on submit 方法调用上给出 false 不明白为什么会发生这种
  • 如何处理与 Google 游戏服务的断开连接?

    我使用 Google 游戏服务作为排行榜 像这样显示它 static public void showLeaderboard String lid if isLogined 1 Log i TAG Showing leaderboard I
  • 使用 awk 或 sed 解析来自 ifconfig 的数据?

    我正在尝试使用 sed 解析 ifconfig 输出中的一些数据 但我无法正确执行此操作 我希望该命令只提取我想要的数字 例如 我有兴趣提取发送的字节 eth1 Link encap Ethernet HWaddr 00 00 00 09
  • CUDA 支持的 Windows 编译器

    我是一个正在尝试入门的 CUDA 程序员新手 我在 5 5 版本中遇到了这里提到的问题 Visual Studio 2010 Express 中 CUDA 5 5 出现 干净 错误 谁能确认这只是 5 5 版本的问题吗 是否有我可以安装的早
  • Firebase 推送通知添加操作按钮

    我正在服务器端发送推送通知 并且我正在使用这个 http 协议 https firebase google com docs cloud messaging http server ref 并且我想添加像这样的操作按钮https githu
  • 函数未定义

    我的 jquery 脚本出现函数未定义错误 我不知道为什么 jQuery 代码 http maps google com maps file api v 2 key ABQIAAAAhTrgZ5jvdqcEQouEpPcZ hS81NmJw
  • 如何通过CSS或javascript给句子赋予句首字母? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何通过CSS或javascript给句子赋予句首字母 我已经尝试过这些 CSS 属性
  • 为 jax rs 客户端设置超时

    我想为 jax rs 客户端设置连接超时 ClientConfig configuration new ClientConfig configuration property ClientProperties CONNECT TIMEOUT
  • 将 GestureOverlayView 添加到我的 SurfaceView 类,如何添加到视图层次结构?

    在后来的回答中我被告知 我必须将我在代码中创建的 GestureOverlayView 添加到我的视图层次结构中 但我并不 100 知道如何做到这一点 以下是为了完整性而提出的原始问题 我希望我的游戏能够识别手势 我有一个很好的 Surfa