1. 程式人生 > >Android手勢原始碼淺析-----手勢的儲存和載入(GestureLibrary)

Android手勢原始碼淺析-----手勢的儲存和載入(GestureLibrary)

    前言:在《Android手勢原始碼淺析------手勢的形成(Gesture)》文章中,介紹了手勢Gesture的形成。那麼,有的時候,使用者繪製的手勢是需要儲存的,以便使用者需要時加載出來進行相關的手勢識別處理;接下來將結合一個Demo重點介紹原始碼中手勢的儲存和載入流程機制;

    一. 關於手勢儲存和載入的Demo

         手勢儲存概要:

1. 在繪製完手勢後,需要將手勢存入手勢庫中,手勢最終會被解析存放在指定路徑建立的檔案中。

           2.  一般是GestureOverlayView新增實現監聽器OnGesturePerformedListener,當繪製完手勢時,會呼叫監聽器的onGesturePerformed(GestureOverlayViewoverlay, Gesture gesture);

           3. onGesturePerformed方法的第二個引數geture(Gesture物件)就代表使用者繪製完成後形成的手勢;

           4.  將得到的Gesture物件通過呼叫GestureLibrary的addGesture方法存入手勢庫建立的指定檔案中;

以下舉一個簡單的Demo來說明第三方應用開發實現手勢的儲存和載入:

           主類程式碼如下:

  1. package com.stevenhu.hu.dgt;  
  2. import java.io.File;  
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.app.AlertDialog.Builder;  
  6. import android.content.DialogInterface;  
  7. import android.content.DialogInterface.OnClickListener;  
  8. import android.content.Intent;  
  9. import android.gesture.Gesture;  
  10. import android.gesture.GestureLibraries;  
  11. import
     android.gesture.GestureLibrary;  
  12. import android.gesture.GestureOverlayView;  
  13. import android.gesture.GestureOverlayView.OnGesturePerformedListener;  
  14. import android.graphics.Bitmap;  
  15. import android.os.Bundle;  
  16. import android.os.Environment;  
  17. import android.view.Menu;  
  18. import android.view.MenuItem;  
  19. import android.view.MenuItem.OnMenuItemClickListener;  
  20. import android.view.View;  
  21. import android.widget.EditText;  
  22. import android.widget.ImageView;  
  23. import android.widget.Toast;  
  24. publicclass DrawGestureTest extends Activity implements OnGesturePerformedListener  
  25. {  
  26.     private GestureOverlayView mDrawGestureView;  
  27.     privatestatic GestureLibrary sStore;  
  28.     /** Called when the activity is first created. */
  29.     @Override
  30.     publicvoid onCreate(Bundle savedInstanceState)  
  31.     {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.main);  
  34.         mDrawGestureView = (GestureOverlayView)findViewById(R.id.gesture);  
  35.         //設定手勢可多筆畫繪製,預設情況為單筆畫繪製
  36.         mDrawGestureView.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);  
  37.         //設定手勢的顏色(藍色)
  38.         mDrawGestureView.setGestureColor(gestureColor(R.color.gestureColor));  
  39.         //設定還沒未能形成手勢繪製是的顏色(紅色)
  40.         mDrawGestureView.setUncertainGestureColor(gestureColor(R.color.ungestureColor));  
  41.         //設定手勢的粗細
  42.         mDrawGestureView.setGestureStrokeWidth(4);  
  43.         /*手勢繪製完成後淡出螢幕的時間間隔,即繪製完手指離開屏幕後相隔多長時間手勢從螢幕上消失; 
  44.          * 可以理解為手勢繪製完成手指離開屏幕後到呼叫onGesturePerformed的時間間隔 
  45.          * 預設值為420毫秒,這裡設定為0.5秒 
  46.          */
  47.         mDrawGestureView.setFadeOffset(500);  
  48.         //繫結監聽器
  49.         mDrawGestureView.addOnGesturePerformedListener(this);  
  50.         //建立儲存手勢的手勢庫
  51.         createStore();  
  52.     }  
  53.     privatevoid createStore()  
  54.     {  
  55.         File mStoreFile = null;   
  56.         /*判斷mStoreFile是為空。 
  57.          * 判斷手機是否插入SD卡,並且應用程式是否具有訪問SD卡的許可權 
  58.          */
  59.         if (mStoreFile == null && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))  
  60.         {  
  61.             mStoreFile = new File(Environment.getExternalStorageDirectory(), "mygesture");  
  62.         }   
  63.         if (sStore == null)  
  64.         {  
  65.             /* 另外三種建立儲存手勢檔案的方式如下: 
  66.             //儲存手勢的檔案在手機SD卡中 
  67.             sStore = GestureLibraries.fromFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "mygesture"); 
  68.             sStore = GestureLibraries.fromPrivateFile(this, Environment.getExternalStorageDirectory().getAbsolutePath + "mygesture"); 
  69.             //儲存手勢的檔案在應用程式的res/raw檔案下 
  70.             sStore = GestureLibraries.fromRawResource(this, R.raw.gestures); 
  71.             */
  72.             sStore = GestureLibraries.fromFile(mStoreFile);  
  73.         }  
  74.         testLoad();  
  75.     }  
  76.     //測試儲存手勢的檔案是否建立成功
  77.     privatevoid testLoad()  
  78.     {  
  79.         if (sStore.load())  
  80.         {  
  81.             showMessage("手勢檔案裝載成功");  
  82.         }  
  83.         else
  84.         {  
  85.             showMessage("手勢檔案裝載失敗");  
  86.         }  
  87.     }  
  88.     publicstatic GestureLibrary getStore()  
  89.     {  
  90.         return sStore;  
  91.     }  
  92.     //手勢繪製完成時呼叫
  93.     @Override
  94.     publicvoid onGesturePerformed(GestureOverlayView overlay, Gesture gesture)   
  95.     {  
  96.         // TODO Auto-generated method stub
  97.         creatDialog(gesture);  
  98.     }  
  99.     privatevoid creatDialog(final Gesture gesture)  
  100.     {  
  101.         View dialogView = getLayoutInflater().inflate(R.layout.show_gesture, null);  
  102.         //imageView用於顯示繪製的手勢
  103.         ImageView imageView = (ImageView) dialogView.findViewById(R.id.show);  
  104.         //獲取使用者儲存手勢的名字
  105.         EditText editText = (EditText)dialogView.findViewById(R.id.name);  
  106.         final String name = editText.getText().toString();  
  107.         // 呼叫Gesture的toBitmap方法形成對應手勢的點陣圖
  108.         final Bitmap bitmap = gesture.toBitmap(12812810, gestureColor(R.color.showColor));  
  109.         imageView.setImageBitmap(bitmap);  
  110.         Builder dialogBuider = new AlertDialog.Builder(DrawGestureTest.this);  
  111. 相關推薦

    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了 本篇成了我的開年之博,距上次做靜默安裝和輔助服務已經有半年之多,最近一直在做專案