日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android手势识别

發(fā)布時(shí)間:2024/4/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android手势识别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、簡(jiǎn)單手勢(shì)識(shí)別:

簡(jiǎn)單手勢(shì)識(shí)別分為以下幾個(gè)步驟:

1.手指觸碰屏幕時(shí),觸發(fā)MotionEvent事件;2.該事件被OnTouchListener監(jiān)聽,可在它的onTouch()方法中獲得該MotionEvent對(duì)象;3.通過GestureDetector轉(zhuǎn)發(fā)MotionEvent對(duì)象給OnGestureListener;4.我們可以通過OnGestureListener獲得該對(duì)象,然后獲取相關(guān)信息,以及做相關(guān)處理。

MotionEvent中封裝了手勢(shì)動(dòng)作事件和x、y坐標(biāo)信息。

GestureDetector對(duì)手勢(shì)進(jìn)行加工,交給GestureListener進(jìn)行處理。

GestureDetector提供了OnDoubleTapListener、OnGestureListener兩種監(jiān)聽器,同時(shí)提供了SimpleOnGestureListener類進(jìn)行適配,讓我們選擇需要的接口進(jìn)行實(shí)現(xiàn)。

我們主要的工作就在步驟4,在GestureListener中對(duì)用戶的手勢(shì)操作進(jìn)行分析和處理。

?

GestureListener有以下回調(diào)接口:

onDown: 按下,只要手指觸碰即觸發(fā)。onFling: 快速滑動(dòng)并松開。onLongPress: 長(zhǎng)按。onScroll: 滑動(dòng)。onShowPress: 短按。onSingleTapUp:抬起。

?

OnDoubleTapListener有以下接口:

onSingleTapConfirmed :單擊。onDoubleTap :雙擊onDoubleTapEvent:雙擊中的第二次按下后事件觸發(fā)。

?

下面是簡(jiǎn)單的測(cè)試代碼:

public class MainActivity extends AppCompatActivity {private ImageView iv;private GestureDetector gestureDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gestureDetector=new GestureDetector(this,new MyGestureLsn());iv= (ImageView) findViewById(R.id.iv);iv.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {gestureDetector.onTouchEvent(event);return true;}});}class MyGestureLsn extends GestureDetector.SimpleOnGestureListener{@Overridepublic boolean onSingleTapUp(MotionEvent e) {Show.log("onSingleTapUp");return super.onSingleTapUp(e);}@Overridepublic void onLongPress(MotionEvent e) {Show.log("onLongPress");super.onLongPress(e);}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {Show.log("onScroll");return super.onScroll(e1, e2, distanceX, distanceY);}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {Show.log("onFling");return super.onFling(e1, e2, velocityX, velocityY);}@Overridepublic void onShowPress(MotionEvent e) {Show.log("onShowPress");super.onShowPress(e);}@Overridepublic boolean onDown(MotionEvent e) {Show.log("onDown");return super.onDown(e);}@Overridepublic boolean onDoubleTap(MotionEvent e) {Show.log("onDoubleTap");return super.onDoubleTap(e);}@Overridepublic boolean onDoubleTapEvent(MotionEvent e) {Show.log("onDoubleTapEvent");return super.onDoubleTapEvent(e);}@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {Show.log("onSingleTapConfirmed");return super.onSingleTapConfirmed(e);}} }

?


?

二、復(fù)雜手勢(shì)識(shí)別

1.生成手勢(shì)庫文件

?android提供了GestureOverlayView類用于復(fù)雜手勢(shì)的識(shí)別,首先得創(chuàng)建手勢(shì)庫文件,建議用谷歌提供的一個(gè)工具——GestureBuilder項(xiàng)目來生成,

當(dāng)然也可以自己創(chuàng)建一個(gè)項(xiàng)目來生成,下面是一段創(chuàng)建手勢(shì)庫的簡(jiǎn)單代碼:

GestureOverlayView gesture = (GestureOverlayView) findViewById(R.id.gesture);gesture.setGestureColor(Color.GREEN);gesture.setGestureStrokeWidth(5);gesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {@Overridepublic void onGesturePerformed(GestureOverlayView gestureOverlayView, final Gesture gesture) {View saveDialog = getLayoutInflater().inflate(R.layout.dialog_save, null, false);ImageView img_show = (ImageView) saveDialog.findViewById(R.id.img_show);Bitmap bitmap = gesture.toBitmap(128, 128, 10, 0xffff0000);img_show.setImageBitmap(bitmap);new AlertDialog.Builder(MainActivity.this).setView(saveDialog).setPositiveButton("保存", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//獲取文件對(duì)應(yīng)的手勢(shì)庫GestureLibrary gestureLib = GestureLibraries.fromFile("/mnt/sdcard/gestures");gestureLib.addGesture("gesture name", gesture);gestureLib.save();}}).setNegativeButton("取消", null).show();}});

每個(gè)手勢(shì)都對(duì)應(yīng)一個(gè)名字,為了防止識(shí)別錯(cuò)誤,最好讓各個(gè)手勢(shì)之間的差別足夠大。

2.識(shí)別

首先得將手勢(shì)庫文件導(dǎo)入到項(xiàng)目中,然后在將新手勢(shì)和手勢(shì)庫中的進(jìn)行匹配:

GestureLibrary gestureLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);if (gestureLibrary.load()) {//加載成功} else {//加載失敗 }GestureOverlayView gesture = (GestureOverlayView) findViewById(R.id.gesture);gesture.setGestureColor(Color.GREEN);gesture.setGestureStrokeWidth(5);gesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {@Overridepublic void onGesturePerformed(GestureOverlayView gestureOverlayView, final Gesture gesture) {//識(shí)別用戶剛繪制的手勢(shì)ArrayList<Prediction> predictions = gestureLibrary.recognize(gesture);ArrayList<String> result = new ArrayList<String>();//遍歷所有找到的Prediction對(duì)象for (Prediction pred : predictions) {if (pred.score > 1.0) {result.add("與手勢(shì)【" + pred.name + "】相似度為" + pred.score);}}if (result.size() > 0) {ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(MainActivity.this,android.R.layout.simple_dropdown_item_1line, result.toArray());new AlertDialog.Builder(MainActivity.this).setAdapter(adapter, null).setPositiveButton("確定", null).show();} else {Toast.makeText(MainActivity.this, "無法找到匹配的手勢(shì)!", Toast.LENGTH_SHORT).show();}}});

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhisuoyu/p/5516514.html

總結(jié)

以上是生活随笔為你收集整理的android手势识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。