Android-手勢識別(普通手勢識別:上 下 左 右 ;自訂手勢識別:對號,錯號 等)

來源:互聯網
上載者:User

Android-手勢識別(普通手勢識別:上 下 左 右 ;自訂手勢識別:對號,錯號 等)

1.回顧

上篇學習了 Android 系統服務的 10個執行個體 ,當然 還有更多的系統服務沒有使用;留下來的遺憾就是,昨晚沒有將demo分享出去;

 

 

2.重點

(1)OnTouchListener 實現 上下左右手勢識別

(2)OnTouchListener + SimpleOnGestureListener + GestureDetector 實現 上下左右 手勢識別

(3)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 實現 自訂手勢識別

 

3.

普通手勢識別: 自訂手勢識別:

 

4. 圖片準備

為了實現的效果更好一點,使用 ps 做了 9張 圖片 ,來作為響應 ,更直觀 的顯示;

(1)待機

 

(2)普通手勢判斷:上下左右

(3)自訂手勢判斷 :對號,錯號,圓,雷

 

5. OnTouchListener 實現 上下左右手勢識別

5.1 思路

(1) OnTouchListener 在前面使用過,在 做 圖片輪播(ViewFlipper) 的時候使用過 ;

(2)基本思路一樣,設定 OnTouchListener ,進行判斷 ;

5.2 實現

給圖片或者布局設定監聽即可;

 

/** *  * 第一種方式: * 添加觸摸 事件監聽器 * @author yuan * */class imgtestTouchListener implements OnTouchListener{private int x=0;private int y=0;@Overridepublic boolean onTouch(View v, MotionEvent event) {// 可以通過 x ,y 來判斷 滑動的手勢//不過只可以判斷:上滑,下滑,左滑,右滑     switch (event.getAction()) {    case MotionEvent.ACTION_DOWN://手指按下的時候:初始化 x,y 值x=(int) event.getX();y=(int) event.getY();break;case MotionEvent.ACTION_MOVE://移動就不說了,因為在這裡判斷手勢,只和 按下的位置和 抬起來的位置 有關;break;case MotionEvent.ACTION_UP:/* * 手指抬起來觸發 ,所以判斷在這裡進行 * 1.獲得結束的x,y * 2.進行判斷 */int upx=(int) event.getX();int upy=(int) event.getY();String result=drawTouch(upx,upy);//提醒textView1.setText(result);break;}return true;}private String drawTouch(int upx,int upy){String str=沒有滑動;//水平滑動if(upx-x>100){str=向右滑動;//改變圖片img_test.setImageResource(R.drawable.icon_right);}else if(x-upx>100){str=向左滑動;//改變圖片img_test.setImageResource(R.drawable.icon_left);}else if(upy-y>100){str=向下滑動;//改變圖片img_test.setImageResource(R.drawable.icon_down);}else if(y-upy>100){str=向上滑動;//改變圖片img_test.setImageResource(R.drawable.icon_up);}return str;}}

6.OnTouchListener + SimpleOnGestureListener + GestureDetector 實現 上下左右 手勢識別

 

6.1 思路

(1)和 使用 OnTouchListener 一樣,不過是將 MotionEvent 對象交給 GestureDeteCtor 對象 處理

(2)GestureDetector 實現的不僅僅 實現 上下左右的判斷,還有很多 這裡僅僅 重新了 onFling() 方法

 

6.2 實現

(1)聲明 並 執行個體化 GestureDetector

 

      private GestureDetector gestureDetector;

 

(2)一定在 OnCreate 裡執行個體化 ,不然報 null 指標 異常

//00.初始化 GestureDetector 對象gestureDetector=new GestureDetector(MainActivity.this,new GestureDelectorSimlpeListener());

(3)實現 SimpleOnGestureListener 監聽

 

 

/** * 2.繼承 SimpleOnGestureListener * 重載 感興趣的 手勢 * @author yuan * */class GestureDelectorSimlpeListener extends SimpleOnGestureListener{@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {/* *  滑動 使用 onFling()方法 *  3.判斷 */String result=drawTouch(e1.getX(),e1.getY(),e2.getX(),e2.getY());textView1.setText(result);return true;}/** * 手勢判斷 * @param x * @param y * @param upx * @param upy * @return */private String drawTouch(float x,float y,float upx,float upy){String str=沒有滑動;//水平滑動if(upx-x>100){str=向右滑動;//改變圖片img_test.setImageResource(R.drawable.icon_right);}else if(x-upx>100){str=向左滑動;//改變圖片img_test.setImageResource(R.drawable.icon_left);}else if(upy-y>100){str=向下滑動;//改變圖片img_test.setImageResource(R.drawable.icon_down);}else if(y-upy>100){str=向上滑動;//改變圖片img_test.setImageResource(R.drawable.icon_up);}return str;}}

(4)實現 OnTouchListener 監聽

 

 

/** * 第二種方式 *  * 使用 GestureDetector 來進行操作 *  */class GestureOntouchListener implements OnTouchListener{@Overridepublic boolean onTouch(View v, MotionEvent event) {//1.獲得 motionEvent 對象gestureDetector.onTouchEvent(event);return true;}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.