对于一个存有Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象呢?
static GestureLibrary  fromFile(String path)  这个方法构造了GestureLibrary对象,是不是还需要load一下,才能用recognize等方法呢?

解决方案 »

  1.   

    load是虚方法,你的子类必须实现该方法。
      

  2.   

    Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象到文件或者其他的地方呢?
      

  3.   

    上一楼的我写错了。
    应该是:对于一个存有Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象呢?
      

  4.   


      GestureLibrary sStore = GestureLibraries.fromFile(“/sdcard/gesture”);  //加载原来某个文件
      sStore.load()                                                   
      sStore.addGesture("xxxxx", mGesture);                          //增加一个Gesture对象
      sStore.save();                                                         //这里保存
    手势对象的获取        GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);
            overlay.addOnGestureListener(new GesturesProcessor());    private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
            public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
                mGesture = null;
            }        public void onGesture(GestureOverlayView overlay, MotionEvent event) {
            }        public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
                mGesture = overlay.getGesture();                              //手势完后这里获取
                if (mGesture.getLength() < LENGTH_THRESHOLD) {
                    overlay.clear(false);
                }
            }        public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
            }
        }
      

  5.   

    GestureLibrary 本身是个抽象类 public abstract class GestureLibraryGestureLibrary对象是在GestureLibraries.fromFile这里返回的FileGestureLibrary对象这里有load的实现
       private static class FileGestureLibrary extends GestureLibrary {
            private final File mPath;        public FileGestureLibrary(File path) {
                mPath = path;
            }        @Override
            public boolean isReadOnly() {
                return !mPath.canWrite();
            }        public boolean save() {
                if (!mStore.hasChanged()) return true;            final File file = mPath;            final File parentFile = file.getParentFile();
                if (!parentFile.exists()) {
                    if (!parentFile.mkdirs()) {
                        return false;
                    }
                }            boolean result = false;
                try {
                    //noinspection ResultOfMethodCallIgnored
                    file.createNewFile();
                    mStore.save(new FileOutputStream(file), true);
                    result = true;
                } catch (FileNotFoundException e) {
                    Log.d(LOG_TAG, "Could not save the gesture library in " + mPath, e);
                } catch (IOException e) {
                    Log.d(LOG_TAG, "Could not save the gesture library in " + mPath, e);
                }            return result;
            }        public boolean load() {
                boolean result = false;
                final File file = mPath;
                if (file.exists() && file.canRead()) {
                    try {
                        mStore.load(new FileInputStream(file), true);
                        result = true;
                    } catch (FileNotFoundException e) {
                        Log.d(LOG_TAG, "Could not load the gesture library from " + mPath, e);
                    } catch (IOException e) {
                        Log.d(LOG_TAG, "Could not load the gesture library from " + mPath, e);
                    }
                }
              return result;
            }
        }
      

  6.   

    我的代码是利用GestureLibraries.fromFile(...)获得gesturelibrary,然后利用gesturelibrary.save()保存。但是程序再一次启动时,再用GestureLibraries.fromFile(...)获得gesturelibrary时,利用gesturelibrary.getGestures(...)方法获得不了先前保存的对象。
    是不是那个保存没有成功?但是gesturelibrary.save()的返回值是true。怎么回事,麻烦帮我看下代码?
    public class GestureTest extends Activity {
        /** Called when the activity is first created. */
    private Gesture currentgesture;
    private GestureOverlayView gov;
    private MyListener listener;
    private GestureLibrary glibrary;
    private String gesturename;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
           
            gesturename = new String("gesture");
            listener = new MyListener();
            gov = (GestureOverlayView) findViewById(R.id.gestures_overlay);
            gov.addOnGestureListener(listener);
            
            File path = new File(Environment.getExternalStorageDirectory(),"my_gesture");
            glibrary = GestureLibraries.fromFile(path);
            
            ArrayList<Gesture> gs = glibrary.getGestures(gesturename);
            
            if(gs ==null)
             Log.v("gesture is null" , "null");
            else
             Log.v("gesture num is " , ""+gs.size());
        }
        
        
        public void addGesture(View view)
        {
         if(currentgesture != null)
         {
         glibrary.addGesture(gesturename, currentgesture);
         gov.clear(true);
         }
         Log.v("add gesture" , "add gesture");
        }
        
        public void cancel(View view)
        {
         if(glibrary.save())
         Log.v("save success","save success");
         ArrayList<Gesture>  gs = glibrary.getGestures(gesturename);
         Log.v("save time" ," "+gs.size());
         Log.v("cancel " , "cancel and save");
        }
        
        private class MyListener implements GestureOverlayView.OnGestureListener
        {
    @Override
    public void onGestureStarted(GestureOverlayView overlay,
    MotionEvent event) {
    // TODO Auto-generated method stub

    } @Override
    public void onGesture(GestureOverlayView overlay, MotionEvent event) {
    // TODO Auto-generated method stub

    } @Override
    public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
    // TODO Auto-generated method stub
    currentgesture = overlay.getGesture();
    Log.v("gesture ended" , "gesture ended");
    } @Override
    public void onGestureCancelled(GestureOverlayView overlay,
    MotionEvent event) {
    // TODO Auto-generated method stub

    }
        
        
        }
    }
      

  7.   

    是不是保存的话,要重写save方法,用里边的GestureStore对象的save(.. , ..)方法来保存?
      

  8.   


            File path = new File(Environment.getExternalStorageDirectory(),"my_gesture");
            glibrary = GestureLibraries.fromFile(path);
            glibrary.load();//这里要加载一次才可以
            ArrayList<Gesture> gs = glibrary.getGestures(gesturename);
      

  9.   

    弄好了,谢谢。
    我还想问一个问题。
    就是如何列举手机系统上安装的所有程序的图标,然后根据用户选择的图标,获得相对应的启动信息,再用startActivity启动呢?
      

  10.   

    这个没做过,Android有API可以获取,网上有例子,刚才找了一个
    http://mm.10086.cn/buluo/topic.php?tid=867