如何保存GestureLibrary对象

direction917 2011-08-26 05:40:48
对于一个存有Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象呢?
static GestureLibrary fromFile(String path) 这个方法构造了GestureLibrary对象,是不是还需要load一下,才能用recognize等方法呢?
...全文
494 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
direction917 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fontlose 的回复:]
引用 10 楼 direction917 的回复:
弄好了,谢谢。
我还想问一个问题。
就是如何列举手机系统上安装的所有程序的图标,然后根据用户选择的图标,获得相对应的启动信息,再用startActivity启动呢?

这个没做过,Android有API可以获取,网上有例子,刚才找了一个
http://mm.10086.cn/buluo/topic.php?tid=867
[/Quote]
多谢了。结贴了。
fontlose 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 direction917 的回复:]
弄好了,谢谢。
我还想问一个问题。
就是如何列举手机系统上安装的所有程序的图标,然后根据用户选择的图标,获得相对应的启动信息,再用startActivity启动呢?
[/Quote]
这个没做过,Android有API可以获取,网上有例子,刚才找了一个
http://mm.10086.cn/buluo/topic.php?tid=867
direction917 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fontlose 的回复:]
Java code

File path = new File(Environment.getExternalStorageDirectory(),"my_gesture");
glibrary = GestureLibraries.fromFile(path);
glibrary.load();//这里要加载一次才可以
A……
[/Quote]
弄好了,谢谢。
我还想问一个问题。
就是如何列举手机系统上安装的所有程序的图标,然后根据用户选择的图标,获得相对应的启动信息,再用startActivity启动呢?
fontlose 2011-08-29
  • 打赏
  • 举报
回复

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

fontlose 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 direction917 的回复:]

引用 5 楼 fontlose 的回复:
GestureLibrary 本身是个抽象类 public abstract class GestureLibrary

GestureLibrary对象是在GestureLibraries.fromFile这里返回的FileGestureLibrary对象这里有load的实现


Java code

private static cl……
[/Quote]

不用重写 等等我看一下
direction917 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fontlose 的回复:]
GestureLibrary 本身是个抽象类 public abstract class GestureLibrary

GestureLibrary对象是在GestureLibraries.fromFile这里返回的FileGestureLibrary对象这里有load的实现


Java code

private static class FileGestureLibra……
[/Quote]
是不是保存的话,要重写save方法,用里边的GestureStore对象的save(.. , ..)方法来保存?
direction917 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fontlose 的回复:]
GestureLibrary 本身是个抽象类 public abstract class GestureLibrary

GestureLibrary对象是在GestureLibraries.fromFile这里返回的FileGestureLibrary对象这里有load的实现


Java code

private static class FileGestureLibra……
[/Quote]
我的代码是利用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

}


}
}
direction917 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wenzheng38 的回复:]
load是虚方法,你的子类必须实现该方法。。。。
[/Quote]
Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象到文件或者其他的地方呢?
fontlose 2011-08-28
  • 打赏
  • 举报
回复
GestureLibrary 本身是个抽象类 public abstract class GestureLibrary

GestureLibrary对象是在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;
}
}
fontlose 2011-08-28
  • 打赏
  • 举报
回复

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) {
}
}






direction917 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wenzheng38 的回复:]
load是虚方法,你的子类必须实现该方法。。。。
[/Quote]
上一楼的我写错了。
应该是:对于一个存有Gesture对象的GestureLibrary对象来说, 应该如何保存GestureLibrary对象呢?
wenzheng38 2011-08-27
  • 打赏
  • 举报
回复
load是虚方法,你的子类必须实现该方法。。。。

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧