Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-手勢識別(普通手勢識別:上 下 左 右 ;自定義手勢識別:對號,錯號 等)

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

編輯:關於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;
		
		@Override
		public 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 裡實例化 ,不然報 空指針 異常

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

(3)實現 SimpleOnGestureListener 監聽

 

 

/**
	 * 2.繼承 SimpleOnGestureListener
	 * 重載 感興趣的 手勢
	 * @author yuan
	 *
	 */
	class GestureDelectorSimlpeListener extends SimpleOnGestureListener{
		
		@Override
		public 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{

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			//1.獲得 motionEvent 對象
			gestureDetector.onTouchEvent(event);
			return true;
		}
	}

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved