Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)

1.回顾

  上篇学习了 Android 系统服务的 10个实例 ,当然 还有更多的系统服务没有使用;留下来的遗憾就是,昨晚没有将demo下载地址分享出去;

   demo下载:

   http://download.csdn.net/detail/lablenet/9062623


2.重点

   (1)OnTouchListener 实现 上下左右手势识别

   (2)OnTouchListener + SimpleOnGestureListener + GestureDetector 实现 上下左右 手势识别

   (3)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 实现 自定义手势识别


3. 效果图

          普通手势识别:                                                        自定义手势识别:

           Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第1张图片            Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第2张图片


4. 图片准备

      为了实现的效果更好一点,使用 ps 做了 9张 图片 ,来作为响应 ,更直观 的显示;

(1)待机


        Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第3张图片 

 (2)普通手势判断:上下左右

        Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第4张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第5张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第6张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第7张图片

  (3)自定义手势判断 :对号,错号,圆,雷

       Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第8张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第9张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第10张图片 Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)_第11张图片


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;
		}
	}

7. 总结

   (1)实现 上下左右手势识别 ,通过两种方式 均可实现 

   (2)自定义手势识别写在下篇,内容比较多点

   (3)Demo 下载 也在下篇


你可能感兴趣的:(android,高级)