`

Gesture建立手写笔画图案

 
阅读更多

添加权限

 

<uses-permission
		android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 

MyGesture.java

 

private Gesture ges;
	private GestureLibrary lib;
	private GestureOverlayView overlay;
	private Button button01, button02 , button03;
	private EditText et;
	private String gesPath;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.my_gesture);

		/* 查看SDCard是否存在 */
		if (!Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState())) {
			/* SD卡不存在,显示Toast信息 */
			toast("SD卡不存在!程序无法运行");
		}
		/* 以findViewById()取得对象 */
		et = (EditText) this.findViewById(R.id.myEditText1);
		button01 = (Button) this.findViewById(R.id.myButton1);
		button02 = (Button) this.findViewById(R.id.myButton2);
		button03 = (Button) this.findViewById(R.id.myButton3);
		overlay = (GestureOverlayView) findViewById(R.id.myGestures1);

		/* 取得GestureLibrary的文件路径 */
		gesPath = new File(Environment.getExternalStorageDirectory(),
				"gestures").getAbsolutePath();

		/* 设置EditText的OnKeyListener */
		et.setOnKeyListener(new EditText.OnKeyListener() {
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				/* 名称与手写都已设置时将新增的Button enable */
				if (ges != null && et.getText().length() != 0) {
					button01.setEnabled(true);
				} else {
					button01.setEnabled(false);
				}
				return false;
			}
		});

		/* 设定Overlay的OnGestureListener */
		overlay.addOnGestureListener(new GestureOverlayView.OnGestureListener() {
			public void onGesture(GestureOverlayView overlay, MotionEvent event) {
			}

			/* 开始画手势时将新增的Button disable,并清除Gesture */
			public void onGestureStarted(GestureOverlayView overlay,
					MotionEvent event) {
				button01.setEnabled(false);
				ges = null;
			}

			/* 手势画完时判断名称与手写是否完整建立 */
			public void onGestureEnded(GestureOverlayView overlay,
					MotionEvent event) {
				ges = overlay.getGesture();
				if (ges != null && et.getText().length() != 0) {
					button01.setEnabled(true);
				}
			}

			public void onGestureCancelled(GestureOverlayView overlay,
					MotionEvent event) {
			}
		});

		/* 设定button01的OnClickListener */
		button01.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				final String gesName = et.getText().toString();
				try {
					File file = new File(gesPath);
					lib = GestureLibraries.fromFile(gesPath);

					if (!file.exists()) {
						/* 文件不存在就直接写入 */
						lib.addGesture(gesName, ges);
						if (lib.save()) {
							/* 将设定画面数据清除 */
							et.setText("");
							button01.setEnabled(false);
							overlay.clear(true);
							/* 保存成功,显示Toast信息 */
							toast("保存成功,保存路径为:" + gesPath);
						} else {
							/* 保存失败,显示Toast信息 */
							toast("保存失败");
						}
					} else {
						/* 文件存在时因读取保存的Gesture */
						if (!lib.load()) {
							/* Library读取失败,显示Toast讯息 */
							toast("Library读取失败");
						} else {
							/* 如果Library中存在相同名称,则因将其移除再写入 */
							final Set<String> en = lib.getGestureEntries();
							if (en.contains(gesName)) {
								new AlertDialog.Builder(MyGesture.this)
										.setTitle("提醒")
										.setMessage("文件已存在,确定要覆盖吗?")
										.setNegativeButton("取消", null)
										.setPositiveButton(
												"确定",
												new DialogInterface.OnClickListener() {
													public void onClick(
															DialogInterface dialoginterface,
															int i) {
														ArrayList<Gesture> al = lib
																.getGestures(gesName);
														for (int t = 0; t < al
																.size(); t++) {
															lib.removeGesture(
																	gesName,
																	al.get(t));
														}
														lib.addGesture(gesName,
																ges);
														if (lib.save()) {
															/* 将设定画面数据清除 */
															et.setText("");
															button01.setEnabled(false);
															overlay.clear(true);
															/* 保存成功,显示Toast信息 */
															toast("保存成功,保存路径为:"
																	+ gesPath);
														} else {
															/* 保存失败,显示Toast信息 */
															toast("保存失败");
														}
													}
												}).show();
							} else {
								lib.addGesture(gesName, ges);
								if (lib.save()) {
									/* 将设定画面数据清除 */
									et.setText("");
									button01.setEnabled(false);
									overlay.clear(true);
									/* 保存成功,显示Toast信息 */
									toast("保存成功,保存路径为:" + gesPath);
								} else {
									/* 保存失败,显示Toast信息 */
									toast("保存失败");
								}
							}
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		/* 设置button02的OnClickListener */
		button02.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				et.setText("");
				button01.setEnabled(false);
				overlay.clear(true);
			}
		});
		button03.setOnClickListener(new OnClickListener(){

			public void onClick(View v) {
				Intent intent = new Intent(MyGesture.this , ReadGesture.class);
				startActivity(intent);
			}
			
		});
	}

	public void toast(String str) {
		Toast.makeText(MyGesture.this, str, Toast.LENGTH_LONG).show();
	}

 ReadGesture.java

 

private SimpleAdapter listItemAdapter; // ListView的适配器
	private ArrayList<HashMap<String, Object>> listItem; // ListView的数据源,这里是一个HashMap的列表
	private ListView myList; // ListView控件
	
	private List<Gesture> gesList;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.phone_info);
		
		listItem = new ArrayList<HashMap<String, Object>>();
		listItemAdapter = new SimpleAdapter(this, listItem, R.layout.list_item3,
				new String[] { "image", "text" }, new int[] { R.id.imageView1,
						R.id.textView1 });
		myList = (ListView) findViewById(R.id.listView1);
		myList.setAdapter(listItemAdapter);
		
		gesList = new ArrayList<Gesture>();
		
		try{
			String gesPath = new File(Environment.getExternalStorageDirectory(),
				"gestures").getAbsolutePath();
			File gesFile = new File(gesPath);
			GestureLibrary lib = GestureLibraries.fromFile(gesFile);
			if(gesFile.exists()){
				if(!lib.load()){
					toast("读取Library失败");
				}
				else{
					Object[] entries = lib.getGestureEntries().toArray();
					for(int i = 0 ; i < entries.length ; i++){
						ArrayList<Gesture> gestureArray = lib.getGestures(entries[i].toString());
						for(int j = 0; j < gestureArray.size() ; j++){
							String gestureName = entries[i].toString();
							addItem(R.drawable.doc,gestureName);
							Gesture gesture = (Gesture)gestureArray.get(j);
							gesList.add(gesture);
						}
					}
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		myList.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				Bitmap bitmap = gesList.get(arg2).toBitmap(64, 64, 12, Color.BLUE);
				ImageView gesImage = new ImageView(ReadGesture.this);
				gesImage.setImageBitmap(bitmap);
				new AlertDialog.Builder(ReadGesture.this)
				.setTitle("查看Gesture")
				.setView(gesImage)
				.setPositiveButton("确定",
						new DialogInterface.OnClickListener() {
							public void onClick(
									DialogInterface dialoginterface,
									int i) {
								dialoginterface.cancel();
							}
						}).show();
			}
			
		});
	}
	
	private void addItem(int image, String str) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("image", image);
		map.put("text", str);
		listItem.add(map);
		listItemAdapter.notifyDataSetChanged();
	}
	
	public void toast(String str) {
		Toast.makeText(ReadGesture.this, str, Toast.LENGTH_LONG).show();
	}




 

 

  • 大小: 23.3 KB
  • 大小: 25.4 KB
  • 大小: 19.1 KB
  • 大小: 22.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics