android創(chuàng)建手勢識別示例代碼
這篇的內容使用到的是android.gesture包,具體的例子參考的是Sample中GestureBuilder程序。
1、手勢創(chuàng)建
手勢創(chuàng)建主要用到GestureOverlayView和GestureLibrary。GestureOverlayView的父類為android.widget.FrameLayout,是手勢繪圖區(qū)。GestureLibrary類主要對手勢進行保存、刪除等操作的,存放手勢的倉庫。下面給出創(chuàng)建手勢的例子,如下圖,可以定義如圖手勢打開csdn.net
1.1、創(chuàng)建繪圖區(qū)
GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);
overlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
overlay.setFadeOffset(2000); //多筆畫每兩次的間隔時間
overlay.setGestureColor(Color.CYAN);//畫筆顏色
overlay.setGestureStrokeWidth(6);//畫筆粗細值
overlay.addOnGestureListener(new GesturesProcessor());
1.2、監(jiān)聽繪制
private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
mDoneButton.setEnabled(false);
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);
}
mDoneButton.setEnabled(true);
}
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
}
}
1.3、保存手勢
public void addGesture(View v) {
if (mGesture != null) {
final TextView input = (TextView) findViewById(R.id.gesture_name);
final CharSequence name = input.getText();
if (name.length() == 0) {
input.setError(getString(R.string.error_missing_name));
return;
}
/**
* 獲取手勢庫
* private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");
* GestureLibrary sStore = GestureLibraries.fromFile(mStoreFile);
*
*/
final GestureLibrary store = GestureBuilderActivity.getStore();
store.addGesture(name.toString(), mGesture);
store.save();
setResult(RESULT_OK);
final String path = new File(Environment.getExternalStorageDirectory(),
"gestures").getAbsolutePath();
Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();
} else {
setResult(RESULT_CANCELED);
}
finish();
}
2、手勢識別
手勢識別也是經(jīng)過創(chuàng)建繪圖區(qū)、監(jiān)聽繪制、比對結果三個過程,這里直接給出代碼。
public class GesturePerformedActivity extends Activity {
private final File mStoreFile = new File(
Environment.getExternalStorageDirectory(), "gestures");
// 手勢庫
GestureLibrary mGestureLib;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gesture_perform);
// 手勢畫板
GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures_overlay);
gestures.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
gestures.setFadeOffset(2000); // 多筆畫每兩次的間隔時間
gestures.setGestureColor(Color.CYAN);// 畫筆顏色
gestures.setGestureStrokeWidth(6);// 畫筆粗細值
// 手勢識別的監(jiān)聽器
gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay,
Gesture gesture) {
// 從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的結果,匹配度高的結果放在最前面
ArrayList<Prediction> predictions = mGestureLib
.recognize(gesture);
if (predictions.size() > 0) {
Prediction prediction = (Prediction) predictions.get(0);
// 匹配的手勢
if (prediction.score > 1.0) { // 越匹配score的值越大,最大為10
Toast.makeText(GesturePerformedActivity.this,
prediction.name, Toast.LENGTH_SHORT).show();
}
}
}
});
if (mGestureLib == null) {
mGestureLib = GestureLibraries.fromFile(mStoreFile);
mGestureLib.load();
}
}
}

- Android通過滑動實現(xiàn)Activity跳轉(手勢識別器應用)
- Android手勢識別器GestureDetector使用詳解
- 札記:android手勢識別功能實現(xiàn)(利用MotionEvent)
- Android View進行手勢識別詳解
- Android基礎開發(fā)之手勢識別
- Android應用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析
- android開發(fā)之為activity增加左右手勢識別示例
- android使用gesturedetector手勢識別示例分享
- 理解Android的手勢識別提高APP的用戶體驗
- Android使用GestureOverlayView控件實現(xiàn)手勢識別
相關文章
Android仿Flipboard動畫效果的實現(xiàn)代碼
這篇文章主要介紹了Android仿Flipboard動畫效果的實現(xiàn)代碼,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下2018-01-01Android?NDK開發(fā)(C語言--聯(lián)合體與枚舉)
這篇文章主要介紹了Android?NDK開發(fā)C語言聯(lián)合體與枚舉,共用體是一種特殊的數(shù)據(jù)類型,允許您在相同的內存位置存儲不同的數(shù)據(jù)類型。您可以定義一個帶有多成員的共用體,但是任何時候只能有一個成員帶有值。下面詳細介紹該內容,需要的朋友可以參考一下2021-12-12