我在后来的回答中被告知我必须将我在代码中创建的 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 并且漂亮的漂亮黄色“你正在画一个手势”永远不会出现。