android的手势监听
android的手势监听可以监听用户在屏幕上的任何点击、滑动事件,然后通过基于监听器的事件处理机制来做出响应。
开发的步骤有两步:
- 创建手势探测器,并进行实例化
- 为手势探测器绑定手势监听器,实现处理方法
手势的监听器监听且只监听以下几种事件:
- onDOwn 触碰事件
- onFling 拖动事件,这个方法会获得拖动的速度
- onLongPress 长按事件
- onScroll 滚动事件
- onShowPress 按下还未拖动或者松开时调用
- 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;
}
}
}
: