GestureDetector.OnGestureListener接口实现点击双击滑动事件

public class MyGesture extends Activity implements OnTouchListener,
        OnGestureListener  

{  

    private GestureDetector mGestureDetector;  

    public MyGesture()  

    {  

        mGestureDetector = new GestureDetector(this);  

    }  

    public void onCreate(Bundle savedInstanceState)  

    {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

        TextView tv = (TextView) findViewById(R.id.tv);  

        tv.setOnTouchListener(this);  

        tv.setFocusable(true);  

        tv.setClickable(true);  

        tv.setLongClickable(true);  

        mGestureDetector.setIsLongpressEnabled(true);  

    }  

    /*
     * *在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,
     * 将捕捉到的MotionEvent交给GestureDetector * 来分析是否有合适的callback函数来处理用户的手势
     */  

    public boolean onTouch(View v, MotionEvent event)  

    {  

        return mGestureDetector.onTouchEvent(event);  

    }  

    // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发  

    public boolean onDown(MotionEvent arg0)  

    {  

        Log.i("MyGesture", "onDown");  

        Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();  

        return true;  

    }  

    /*
     * * 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发 *
     * 注意和onDown()的区别,强调的是没有松开或者拖动的状态
     */  

    public void onShowPress(MotionEvent e)  

    {  

        Log.i("MyGesture", "onShowPress");  

        Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show();  

    }  

    // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发  

    public boolean onSingleTapUp(MotionEvent e)  

    {  

        Log.i("MyGesture", "onSingleTapUp");  

        Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show();  

        return true;  

    }  

    // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发  

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY)  

    {  

        Log.i("MyGesture", "onFling");  

        Toast.makeText(this, "onFling", Toast.LENGTH_LONG).show();  

        return true;  

    }  

    // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发  

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY)  

    {  

        Log.i("MyGesture", "onScroll");  

        Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();  

        return true;  

    }  

    // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发  

    public void onLongPress(MotionEvent e)  

    {  

        Log.i("MyGesture", "onLongPress");  

        Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();  

    }  

}  

3. Fling事件的处理代码:除了第一个触发Fling的ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,我们还可以根据用 户在X轴或者Y轴上的移动速度作为条件。比如下面的代码中我们就在用户移动超过100个像素,且X轴上每秒的移动速度大于200像素时才进行处理。

[java] view plain copy
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY)  

    {  

        // 参数解释:  

        // e1:第1个ACTION_DOWN MotionEvent  

        // e2:最后一个ACTION_MOVE MotionEvent  

        // velocityX:X轴上的移动速度,像素/秒  

        // velocityY:Y轴上的移动速度,像素/秒  

        // 触发条件 :  

        // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒  

        final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200;  

        if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
                && Math.abs(velocityX) > FLING_MIN_VELOCITY)  

        {  

            // Fling left  

            Log.i("MyGesture", "Fling left");  

            Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();  

        }  

        else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
                && Math.abs(velocityX) > FLING_MIN_VELOCITY)  

        {  

            // Fling right  

            Log.i("MyGesture", "Fling right");  

            Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();  

        }  

        return false;  

    }

随笔,摘自http://blog.csdn.net/tianfeng701/article/details/7556366

时间: 2024-08-04 10:28:46

GestureDetector.OnGestureListener接口实现点击双击滑动事件的相关文章

android学习——GestureDetector.OnGestureListener 详解

Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.Android中的Gesture识别(detector)是通过GestureDetector.OnGestureListener接口实现的. 首先,Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,就是通过onTouchListener实现: 其次,所有View的子类都可以通

android——GestureDetector.OnGestureListener 手势详解

Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.Android中的 Gesture识别(detector)是通过GestureDetector.OnGestureListener接口实现的. 首先,Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,就是通过onTouchListener实现: 其次,所有View的子类都可以

GestureDetector.OnGestureListener

为了加强鼠标响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single Tap Up.Show Press.Long Press.Scroll.Down.Fling),具体包括以下几种: boolean  onDoubleTap(MotionEvent e) 解释:双击的第二下Touch down时触发 boolean  onDoubleTapEvent(MotionEve

AndroidのListView之滑动列表项(点击事件和滑动事件共存) - bvin

返回脚本百事通 这里正好在项目有这么一个bt的需求,如下图ListView的item可以响应点击事件也可以响应item的左右滑动事件,两个事件可以相互独立互不影响. 听说iphone的list选项就有这样bt的功能,安卓版的手机QQ和微信和QQ通讯录也有类似的效果,在网上各种寻早方案都试过,要不只能滑动不能点击要么就只能点击不能滑动,而且操作很不灵敏,网上的代码都是在itemView的onTouch方法里处理,判断down和up的像素差.其实这样操作相当不便,down-up这样的其实只能算拖动事

使用jQuery实现点击左右滑动切换特效

使用jQuery实现点击左右滑动切换特效: HTML代码如下: 1 <!--整体背景div--> 2 <div class="warp"> 3 <!--中间内容div--> 4 <div class="divContent"> 5 <div class="content"> 6 <ul class="contentUl"> 7 <li> 8 &

自动化测试程序之二模拟触摸屏点击事件和滑动事件(C语言)

一.测试程序编写说明 终端设备上运行的是LINUX+QT应用程序,使用触摸屏进行人机交互.经过测试人员长时间的人机交互测试,来确认系统的功能是否满足需求后.现在需要编写一个自动化的测试程序模拟触摸屏点击事件和滑动,并能够按照测试人员预设的脚本执行,比如在屏幕的某个位置需要点击某个按钮,或是屏幕或是列表需要滑动,并且这一个或几个动作需要连续执行10000次或更多.通过这样的自动测试,可以减轻测试人员的负担,还可以查看画面按钮触发N次后,画面执行N次后的系统的稳定性,如内存使用率(内存是否泄漏),c

例题 进度条效果、点击图片滑动效果。

进度条效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

android ViewPager滑动事件讲解

首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected) onPageScrollStateChanged(int arg0)   ,此方法是在状态改变的时候调用,其中arg0这个参数 有三种状态(0,1,2).arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,a

android ViewPager滑动事件(OnPageChangeListener)讲解

首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected) onPageScrollStateChanged(int arg0)   ,此方法是在状态改变的时候调用,其中arg0这个参数 有三种状态(0,1,2).arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,a