建立自己的手写笔画图案

/*
 * 建立自己的手写笔画图案
 * Gesture对象是自GestureOverlay.getGesture()所取得的手写
 * 对象。GestureLibraries保存手写背后所包含的意义,程序中利
 * 用GestureLibraries.fromFile()方法来加载预设的Gesture文件
 * 倘若默认手机的SD存储卡中尚未创建Gesture手写数据文件,此程序
 * 也会处理创建新文件的工作。此外还应用了GestureLibraries.addGesture()
 * 新建手写数据;GestureLibraries.save()保存写入的手写数据
 * GestureLibraries.load()加载手写数据;GestureLibraries.removeGesture()
 * 删除手写数据等方法。
 */
import 略;

public class Ex05_25Activity extends Activity {
	private Gesture ges;
	private GestureLibrary lib;
	private GestureOverlayView overlay;
	private Button bt1, bt2;
	private EditText et;
	private String getPath;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 查看SD卡是否存在
		if (!Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState())) {
			// SD卡不存在,提示信息
			Toast.makeText(Ex05_25Activity.this, "SD卡不存在,程序无法执行!",
					Toast.LENGTH_SHORT).show();
			this.finish();
		}
		et = (EditText) findViewById(R.id.myEditText1);
		bt1 = (Button) findViewById(R.id.myButton1);
		bt2 = (Button) findViewById(R.id.myButton1);
		overlay = (GestureOverlayView) findViewById(R.id.myGestures1);
		// 取得系统默认的GestureLibrary文件路径
		getPath = new File(Environment.getExternalStorageDirectory(),
				"gestures").getAbsolutePath();
		// 设置EditText的onKeyListener
		et.setOnKeyListener(new EditText.OnKeyListener() {

			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				// TODO Auto-generated method stub
				// 名称和手写都设置好时 将新建的Button enable
				if (ges != null && et.getText().length() != 0) {
					bt1.setEnabled(true);
				} else {
					bt1.setEnabled(false);
				}
				return false;
			}
		});
		// 设置overlay的OnGestureListener
		overlay.addOnGestureListener(new GestureOverlayView.OnGestureListener() {
			// 开始手写时将添加的Button disable,并清除Gesture
			@Override
			public void onGestureStarted(GestureOverlayView overlay,
					MotionEvent event) {
				// TODO Auto-generated method stub
				bt1.setEnabled(false);
				ges = null;
			}

			// 手写完时判断名称和手写时候完整建立
			@Override
			public void onGestureEnded(GestureOverlayView overlay,
					MotionEvent event) {
				// TODO Auto-generated method stub
				ges = overlay.getGesture();
				if (ges != null && et.getText().length() != 0) {
					bt1.setEnabled(true);
				}
			}

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

			}

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

			}
		});
		bt1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String gesName = et.getText().toString();
				try {
					File file = new File(getPath);
					lib = GestureLibraries.fromFile(getPath);
					if (!file.exists()) {
						// 文件不存在就直接写入
						lib.addGesture(gesName, ges);
						if (lib.save()) {// 保存成功
							// 将设置画面数据清除
							et.setTag("");
							bt1.setEnabled(false);
							overlay.clear(true);
							Toast.makeText(
									Ex05_25Activity.this,
									getString(R.string.save_success) + ":"
											+ getPath, Toast.LENGTH_SHORT)
									.show();
						} else {// 保存失败
							Toast.makeText(
									Ex05_25Activity.this,
									getString(R.string.save_failed) + ":"
											+ getPath, Toast.LENGTH_LONG)
									.show();
						}
					} else {// 文件存在时,想读取以保存的Gesture
						if (!lib.load()) {// 读取失败
							Toast.makeText(
									Ex05_25Activity.this,
									getString(R.string.load_failed) + ":"
											+ getPath, Toast.LENGTH_SHORT)
									.show();
						} else {// 读取成功
								// 如果存在相同的名称,则先将其移除再写入
							Set<String> en = lib.getGestureEntries();
							if (en.contains(gesName)) {
								ArrayList<Gesture> al = lib
										.getGestures(gesName);
								for (int i = 0; i < al.size(); i++) {
									lib.removeGesture(gesName, al.get(i));
								}
							}
							lib.addGesture(gesName, ges);
							if (lib.save()) {// 保存成功
								// 将设置画面数据清除
								et.setTag("");
								bt1.setEnabled(false);
								overlay.clear(true);
								Toast.makeText(
										Ex05_25Activity.this,
										getString(R.string.save_success) + ":"
												+ getPath, Toast.LENGTH_SHORT)
										.show();
							} else {// 保存失败
								Toast.makeText(
										Ex05_25Activity.this,
										getString(R.string.save_failed) + ":"
												+ getPath, Toast.LENGTH_LONG)
										.show();
							}
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		bt2.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				et.setText("");
				bt1.setEnabled(false);
				overlay.clear(true);
			}
		});
	}
}


main.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/white"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/myTextView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/title"
            android:textColor="@drawable/blue" />

        <EditText
            android:id="@+id/myEditText1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <android.gesture.GestureOverlayView
        android:id="@+id/myGestures1"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"
        android:gestureStrokeType="multiple" />

    <LinearLayout
        style="@android:style/ButtonBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >


        <Button
            android:id="@+id/myButton1"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:enabled="false"
            android:text="@string/button_done" />

        <Button
            android:id="@+id/myButton2"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/button_cancel" />
    </LinearLayout>

</LinearLayout>


下面我们来看看程序运行后的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值