Android распознает жесты - PullRequest
0 голосов
/ 31 июля 2011

Я импортировал пример жеста и создал свое собственное приложение. В макете есть кнопка и вид наложения жестов. Кнопка запускает GestureBuilderActivity.class, где я могу добавлять или удалять жесты (это пример). Под кнопкой в ​​GestureOverlayView я могу рисовать жесты. Компоновка:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <Button  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Click to see gestures"
    android:id="@+id/Button01"
    />
    <android.gesture.GestureOverlayView
    android:id="@+id/gestures"
    android:layout_width="fill_parent" 
    android:layout_height="0dip"
    android:layout_weight="1.0" />
</LinearLayout>

Из примера я знаю, что именно здесь я нахожу жесты:

 final String path = new File(Environment.getExternalStorageDirectory(),
                    "gestures").getAbsolutePath();

и сообщение toast показывает (все еще в примере), что жест сохраняется в / mnt / sdcard / gestures:

Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();

Как я могу заставить приложение распознавать жест, который я рисую, и показывать его имя в тостовом сообщении?

1 Ответ

0 голосов
/ 01 августа 2011

Во-первых, я прочитал бы эту короткую статью , в которой объясняется, как использовать жесты.

Чтобы распознать жест, вам необходимо предоставить OnGesturePerformedListener для GestureOverlayView.В этом примере я только что заставил Activity реализовать OnGesturePerformedListener.

public class MyActivity extends Activity implements OnGesturePerformedListener {

private GestureLibrary mGestures;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // I use resources but you may want to use GestureLibraries.fromFile(path)
    mGestures = GestureLibraries.fromRawResource(this, R.raw.gestures);
    if (!mGestures.load()) {
        showDialog(DIALOG_LOAD_FAIL);
        finish();
    }

    // register the OnGesturePerformedListener (i.e. this activity)
    GestureOverlayView gesturesView = (GestureOverlayView) findViewById(R.id.gestures);
    gesturesView.addOnGesturePerformedListener(this);
}

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

        // Determine if a gesture was performed.  
        // This can be tricky, here is a simple approach.
    Prediction prediction = (predictions.size() != 0) ? predictions.get(0) : null;
    prediction = (prediction.score >= 1.0) ? prediction: null;

    if (prediction != null) {
           // do something with the prediction
           Toast.makeText(this, prediction.name + "(" + prediction.score + ")", Toast.LENGTH_LONG).show();
    }
}
...