android拾遗04——手势监听

android的手势监听

android的手势监听可以监听用户在屏幕上的任何点击、滑动事件,然后通过基于监听器的事件处理机制来做出响应。
开发的步骤有两步:

  1. 创建手势探测器,并进行实例化
  2. 为手势探测器绑定手势监听器,实现处理方法

手势的监听器监听且只监听以下几种事件:

  1. onDOwn 触碰事件
  2. onFling 拖动事件,这个方法会获得拖动的速度
  3. onLongPress 长按事件
  4. onScroll 滚动事件
  5. onShowPress 按下还未拖动或者松开时调用
  6. onSingleTapUp 轻触事件

代码示例:

package com.exe.feifei.gesture;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    //声明手势探测器
    GestureDetector gd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化手势探测器的同时就是在为手势探测器绑定监听器,传入的第一个参数是当前的activity,第二个就是手势监听器
        gd=new GestureDetector(this,new MyGestureListener());
    }

    //在这个activity的触摸事件里面将触摸的处理托管给手势探测器处理
    @Override
    public boolean onTouchEvent(MotionEvent me)
    {
        return gd.onTouchEvent(me);
    }

    //自定义手势监听器
    class MyGestureListener implements GestureDetector.OnGestureListener {
        //当手指按下去的时候会调用,事件里面会有按下去的坐标
        @Override
        public boolean onDown(MotionEvent arg0)
        {
            Toast.makeText(MainActivity.this,"按下去了ondown"+arg0.getX()+","+arg0.getY(),Toast.LENGTH_SHORT).show();
            return false;
        }
        //长按事件处理方法一般按下去三秒才会处理事件
        @Override
        public void onLongPress(MotionEvent e)
        {
            Toast.makeText(MainActivity.this,"长按下去了onlongpress"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show();
        }
        //手指在屏幕上快速滑动的时候调用,velocityX和VelocityY分别指的是在X和Y方向上的速度
        @Override
        public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY)
        {
            Toast.makeText(MainActivity.this,"快速滑动onfling"+e1.getX()+","+e1.getY(),Toast.LENGTH_SHORT).show();
            return false;
        }
        //当手指在屏幕上拖动的整个过程中都会形成事件,所以这个会调用很多次,但是每次的参数值是一样的,因为是在滑动的动作做完之后才会触发
        @Override
        public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY)
        {
            Toast.makeText(MainActivity.this,"滚动onscroll"+e1.getX()+","+e1.getY(),Toast.LENGTH_SHORT).show();
            return false;
        }
        //每次按下去但是没有马上抬起来就会调用,和轻触相区别,测试估计每次两秒才相应
        @Override
        public void onShowPress(MotionEvent e)
        {
            Toast.makeText(MainActivity.this,"点击onshowpress"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show();
        }
        //轻触事件,按下去在一秒甚至更短的时间内抬起就会触发
        @Override
        public boolean onSingleTapUp(MotionEvent e)
        {
            Toast.makeText(MainActivity.this,"singleTapUP"+e.getX()+","+e.getY(),Toast.LENGTH_SHORT).show();
            return  false;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fate_killer_liu_jie/article/details/46868177