Android手勢原始碼淺析-----手勢的儲存和載入(GestureLibrary)
前言:在《Android手勢原始碼淺析------手勢的形成(Gesture)》文章中,介紹了手勢Gesture的形成。那麼,有的時候,使用者繪製的手勢是需要儲存的,以便使用者需要時加載出來進行相關的手勢識別處理;接下來將結合一個Demo重點介紹原始碼中手勢的儲存和載入流程機制;
一. 關於手勢儲存和載入的Demo
手勢儲存概要:
1. 在繪製完手勢後,需要將手勢存入手勢庫中,手勢最終會被解析存放在指定路徑建立的檔案中。
2. 一般是GestureOverlayView新增實現監聽器OnGesturePerformedListener,當繪製完手勢時,會呼叫監聽器的onGesturePerformed(GestureOverlayViewoverlay, Gesture gesture);
3. onGesturePerformed方法的第二個引數geture(Gesture物件)就代表使用者繪製完成後形成的手勢;
4. 將得到的Gesture物件通過呼叫GestureLibrary的addGesture方法存入手勢庫建立的指定檔案中;
以下舉一個簡單的Demo來說明第三方應用開發實現手勢的儲存和載入:
主類程式碼如下:
- package com.stevenhu.hu.dgt;
- import java.io.File;
-
import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.AlertDialog.Builder;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnClickListener;
- import android.content.Intent;
- import android.gesture.Gesture;
- import android.gesture.GestureLibraries;
-
import
- import android.gesture.GestureOverlayView;
- import android.gesture.GestureOverlayView.OnGesturePerformedListener;
- import android.graphics.Bitmap;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.MenuItem.OnMenuItemClickListener;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.Toast;
- publicclass DrawGestureTest extends Activity implements OnGesturePerformedListener
- {
- private GestureOverlayView mDrawGestureView;
- privatestatic GestureLibrary sStore;
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mDrawGestureView = (GestureOverlayView)findViewById(R.id.gesture);
- //設定手勢可多筆畫繪製,預設情況為單筆畫繪製
- mDrawGestureView.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
- //設定手勢的顏色(藍色)
- mDrawGestureView.setGestureColor(gestureColor(R.color.gestureColor));
- //設定還沒未能形成手勢繪製是的顏色(紅色)
- mDrawGestureView.setUncertainGestureColor(gestureColor(R.color.ungestureColor));
- //設定手勢的粗細
- mDrawGestureView.setGestureStrokeWidth(4);
- /*手勢繪製完成後淡出螢幕的時間間隔,即繪製完手指離開屏幕後相隔多長時間手勢從螢幕上消失;
- * 可以理解為手勢繪製完成手指離開屏幕後到呼叫onGesturePerformed的時間間隔
- * 預設值為420毫秒,這裡設定為0.5秒
- */
- mDrawGestureView.setFadeOffset(500);
- //繫結監聽器
- mDrawGestureView.addOnGesturePerformedListener(this);
- //建立儲存手勢的手勢庫
- createStore();
- }
- privatevoid createStore()
- {
- File mStoreFile = null;
- /*判斷mStoreFile是為空。
- * 判斷手機是否插入SD卡,並且應用程式是否具有訪問SD卡的許可權
- */
- if (mStoreFile == null && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
- {
- mStoreFile = new File(Environment.getExternalStorageDirectory(), "mygesture");
- }
- if (sStore == null)
- {
- /* 另外三種建立儲存手勢檔案的方式如下:
- //儲存手勢的檔案在手機SD卡中
- sStore = GestureLibraries.fromFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "mygesture");
- sStore = GestureLibraries.fromPrivateFile(this, Environment.getExternalStorageDirectory().getAbsolutePath + "mygesture");
- //儲存手勢的檔案在應用程式的res/raw檔案下
- sStore = GestureLibraries.fromRawResource(this, R.raw.gestures);
- */
- sStore = GestureLibraries.fromFile(mStoreFile);
- }
- testLoad();
- }
- //測試儲存手勢的檔案是否建立成功
- privatevoid testLoad()
- {
- if (sStore.load())
- {
- showMessage("手勢檔案裝載成功");
- }
- else
- {
- showMessage("手勢檔案裝載失敗");
- }
- }
- publicstatic GestureLibrary getStore()
- {
- return sStore;
- }
- //手勢繪製完成時呼叫
- @Override
- publicvoid onGesturePerformed(GestureOverlayView overlay, Gesture gesture)
- {
- // TODO Auto-generated method stub
- creatDialog(gesture);
- }
- privatevoid creatDialog(final Gesture gesture)
- {
- View dialogView = getLayoutInflater().inflate(R.layout.show_gesture, null);
- //imageView用於顯示繪製的手勢
- ImageView imageView = (ImageView) dialogView.findViewById(R.id.show);
- //獲取使用者儲存手勢的名字
- EditText editText = (EditText)dialogView.findViewById(R.id.name);
- final String name = editText.getText().toString();
- // 呼叫Gesture的toBitmap方法形成對應手勢的點陣圖
- final Bitmap bitmap = gesture.toBitmap(128, 128, 10, gestureColor(R.color.showColor));
- imageView.setImageBitmap(bitmap);
- Builder dialogBuider = new AlertDialog.Builder(DrawGestureTest.this);
-
相關推薦
Android手勢原始碼淺析-----手勢的儲存和載入(GestureLibrary)
前言:在《Android手勢原始碼淺析------手勢的形成(Gesture)》文章中,介紹了手勢Gesture的形成。那麼,有的時候,使用者繪製的手勢是需要儲存的,以便使用者需要時加載出來進行相關的手勢識別處理;接下來將結合一個Demo重點介紹原始碼中手勢的儲存和載入流程機制; 一.
Android 以JSON格式儲存和載入本地檔案
本章主要講把一個物件以json格式儲存在沙盒中,然後又從沙盒中將json資料讀取出來。 每個應用的沙盒目錄都是裝置/data/data目錄的子目錄,且預設以應用包命名。例如,CriminalIntent應用的沙盒目錄全路徑為:/data/data/com.bi
Android生成二維碼--儲存和分享二維碼圖片
之前寫過生成自定義二維碼的兩篇文章:《Android生成自定義二維碼》《Android生成二維碼–拍照或從相簿選取圖片》,下面就介紹一下Android應用內如何儲存以及分享二維碼圖片。 儲存圖片 Adnroid中儲存圖片可
Pytorch 儲存和載入模型 part2
搭建網路: torch.manual_seed(1) # reproducible # 假資料 x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) y = x.p
pytorch 模型的儲存和載入
本文轉至:https://byjiang.com/2017/06/05/How_To_Save_And_Restore_Model/ 在模型完成訓練後,我們需要將訓練好的模型儲存為一個檔案供測試使用,或者因為一些原因我們需要繼續之前的狀態訓練之前儲存的模型,那麼如何在PyTorch中儲存和恢復模型
基於pytorch的 儲存和載入模型引數
當我們花費大量的精力訓練完網路,下次預測資料時不想再(有時也不必再)訓練一次時,這時候torch.save(),torch.load()就要登場了。 儲存和載入模型引數有兩種方式: 方式一: torch.save(net.state_dict(),path): 功能
pytorch筆記02)模型的儲存和載入
儲存和載入整個模型 torch.save(model_object, 'model.pkl') model = torch.load('model.pkl') 僅儲存和載入模型引數(推薦使用,需要提前手動構建模型) torch.save(model_object.state_
【學習筆記】Hands-on ML with sklearn&tensorflow [TF] [1]模型的訓練、儲存和載入
本篇內容:一個簡單的預測模型的建立、訓練、儲存和載入。 匯入必要模組: import numpy as np import pandas as pd import tensorflow as tf import ssl #解決資料來源網站簽名認證失敗的問題 from sklearn.data
機器學習實踐(十六)—sklearn之模型儲存和載入
一、sklearn - 模型的儲存和載入 - API from sklearn.externals import joblib 儲存 joblib.dump(rf, ‘test.pkl’) 載入 estimator
TensorFlow儲存和載入訓練模型
儲存:使用saver.save()方法儲存 載入:使用saver.restore()方法載入 下面是個完整例子: 儲存: import tensorflow as tf W = tf.Variable([[1, 1, 1], [2, 2, 2]], dtype=tf.float
python儲存和載入陣列
通過np.save("filename.npy",a)儲存陣列,陣列可以為高維。利用這種方法,儲存檔案的字尾名字一定會被置為.npy,這種格式最好只用numpy.load("filename")來讀取。 舉個例子: import numpy as np a = np.array([[[
tensorflow儲存和載入模型
× TF 儲存和載入模型 <!-- 作者區域 --> <div class="author"> <a class="avatar" href="/u/ff5c
深度學習框架Tensorflow學習與應用(八 儲存和載入模型,使用Google的影象識別網路inception-v3進行影象識別)
一 模型的儲存 [email protected]:~/tensorflow$ cat 8-1saver_save.py # coding: utf-8 # In[1]: import tensorflow as tf from tensorflow.examples.tutorials
tensorflow之變數:建立、初始化、儲存和載入
當訓練模型時,用變數來儲存和更新引數。變數包含張量 (Tensor)存放於記憶體的快取區。建模時它們需要被明確地初始化,模型訓練後它們必須被儲存到磁碟。這些變數的值可在之後模型訓練和分析是被載入。 本文件描述以下兩個TensorFlow類。點選以下連結可檢視完整的API文件
儲存和載入模型
在訓練模型過程中,由於資料集較大,模型訓練迭代次數較多等原因,使得模型訓練較耗時,因此將訓練好的模型進行儲存以便下次直接使用是很有必要,下面介紹兩種模型的儲存和載入方法 1.使用pickle模組 (1)儲存模型 with open(“模型儲存的位置
keras訓練淺層卷積網路並儲存和載入模型
這裡我們使用keras定義簡單的神經網路全連線層訓練MNIST資料集和cifar10資料集: keras_mnist.py from sklearn.preprocessing import LabelBinarizer from sklearn.model_select
tensorflow教程:變數建立、初始化、儲存和載入
變數儲存到檔案 import tensorflow as tf import numpy as np # Create two variables. x_data = np.float32([1,2,3,4,5,6,7,8,9,0]) weights = tf.Variable(tf.random_norma
使用Weka進行資料探勘(Weka教程九)模型序列化/持久化儲存和載入
有很多時候,你在構建了一個模型並完成調優後,你很可能會想把這個模型存入到磁碟中,免得下次再重新訓練。尤其是神經網路、SVM等模型訓練時間非常長,重新訓練非常浪費時間。那麼怎麼持久化模型呢? 其實既然模型也是一個JAVA物件,那我就按照JAVA的序列化和反序列化
Android繪圖之Canvas狀態儲存和恢復(7)
1 Canvas 狀態儲存和恢復 前面講canvas概念理解時 已經講解了save和savelayer,saveLayerAlpha函式,這裡進行canvas狀態儲存和恢復的詳細講解。 Canvas 呼叫了translate,scale,rotate,skew,concat or
Android PackageManager原始碼淺析以及靜默安裝實現方式
Aandroid應用管理 >http://blog.csdn.net/sk719887916/article/details/50314017 skay整理。 >2016了 本篇成了我的開年之博,距上次做靜默安裝和輔助服務已經有半年之多,最近一直在做專案