Android中的手势分割

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

public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {
    ArrayListscore > 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
    .

    }
}

但我的标准不是那样.我想认识一个字.我想一次写一个单词.

在为每次成功的比赛写一个单词时,应该在edittext上打印相应的字母.

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

所以我的问题是如何才能获得它?是否可以分割手势(在写作时对单词进行分段)?任何工作代码示例或链接都将受到赞赏.

最佳答案
如果您将单词写成单独的字母(即不是草书),如问题中给出的图像所示.然后干脆就这样做 –

public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {
    ArrayListscore > 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 ArrayListomrawResource(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);

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

所以基本上我们捕捉触摸位置并从中创建一个Gesture,它传递给GestureLibrary的recogn()方法.如果识别出手势,则我们将其打印并清除触摸位置,以便可以识别新的字母.

示例项目:Cursive_eclipse_project.zip

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...