gpt4 book ai didi

android - Android 中的手势分割

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:47:34 25 4
gpt4 key购买 nike

我正在通过 Android 的手势进行手写字母检测的示例工作。当我一次输入1 个字符时效果很好。这意味着当我通过手势在屏幕上写 A 时,程序可以很好地识别它(因为我之前把它放在手势库中)。截至目前,我的代码是这样的。

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

if (predictions.size() > 0 && predictions.get(0).score > 1.0) {

String letter = predictions.get(0).name;

Toast.makeText(this, letter, Toast.LENGTH_SHORT).show();

if(letter.contains("A")) //when matches i print it to edittext
edittext.setText("A");
.
. //rest of stuff here like previous way
.

}
}

但我的标准不是那样。我想认识一个词。我想像as一样一次写一个字。 example

并且在为每个成功匹配写一个单词的过程中,相应的字母应该像 as 一样打印在 edittext 上。

A,N,D,R,O,I,D

所以我的问题是我怎样才能获得它?是否可以分割手势(在书写时分割单词)?任何有效的代码示例或链接将不胜感激。

最佳答案

如果您将单词写成单独的字母(即不是草书),如问题中给出的图片所示。然后只需这样做 -

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

if (predictions.size() > 0) {
Prediction prediction = predictions.get(0);
String letter = prediction.name;

if (prediction.score > 1.0) {
edittext.setText(edittext.getText().toString() + letter);
}
}
}

这实际上是将新字母附加到现有的 edittext 字符串。

但是,如果您谈论的是草书,那么它就复杂多了。这是一些可以跟踪草书书写的代码。

public class MainActivity extends Activity {
private Handler mHandler;

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

@Override
protected void onResume() {
super.onResume();
Tracker t = new Tracker();
t.start();
}

@Override
protected void onPause() {
if (mHandler != null)
mHandler.getLooper().quit();
super.onPause();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
if (mHandler != null) {
Message msg = Message.obtain();
msg.obj = event.getX() + "," + event.getY();
mHandler.sendMessage(msg);
}
break;
}
return true;
}

private class Tracker extends Thread {
private static final int LETTER_SIZE = 30;

private GestureLibrary gLib;
private ArrayList<GesturePoint> points;

public Tracker() {
points = new ArrayList<GesturePoint>();
gLib = GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures);
gLib.load();
}

@Override
public void run() {
Looper.prepare();
mHandler = new Handler() {

public void handleMessage(Message msg) {
String[] pos = String.valueOf(msg.obj).split(",");
points.add(new GesturePoint(Float.parseFloat(pos[0]), Float.parseFloat(pos[1]), System.currentTimeMillis()));

if (points.size() < LETTER_SIZE) return;

GestureStroke stroke = new GestureStroke(points);
Gesture gesture = new Gesture();
gesture.addStroke(stroke);

ArrayList<Prediction> predictions = gLib.recognize(gesture);
if (predictions.size() > 0) {
Prediction prediction = predictions.get(0);
String letter = prediction.name;

if (prediction.score > 1.0) {
Log.e("Found", letter);
points.clear();
}
}
}
};
Looper.loop();
}
}
}

所以基本上我们捕获触摸位置并从中创建一个手势,然后传递给 GestureLibrary 的 recognize() 方法。如果识别出一个手势,那么我们将其打印出来并清除触摸位置,以便识别一个新字母。

示例项目:Cursive_eclipse_project.zip

关于android - Android 中的手势分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15986618/

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