gpt4 book ai didi

android - 将 GestureOverlayView 添加到我的 SurfaceView 类,如何添加到 View 层次结构?

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:11 25 4
gpt4 key购买 nike

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

我希望我的游戏能够识别手势。我有一个很好的 SurfaceView 类,我执行一个 onDraw 来绘制我的 Sprite ,我有一个线程运行它来调用 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,我没有使用它,我的 Activity 很简单:

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

所以我有点不知道这里缺少的信息,它没有调用 onGesturePerformed 并且漂亮漂亮的黄色“你正在画一个手势”从来没有出现过。

最佳答案

这是一个很大的痛苦,但我终于找到了解决方案。在线任何地方都绝对没有关于此的良好文档。我终于通过使用称为“FrameLayout”的东西然后在那里添加表面 View 和手势 View 来让它工作。完成后,您将 FrameLayout 设置为您的内容 View 。

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

您的 Activity 必须实现 OnGesturePerformedListener 接口(interface)才能工作。

您可以在我的网站上查看完整教程和源代码: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();
}
}
}
}

关于android - 将 GestureOverlayView 添加到我的 SurfaceView 类,如何添加到 View 层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com