`

2011.10.11——— android GestureDetector 测试OnGestureListener

阅读更多
2011.10.11——— android GestureDetector 测试OnGestureListener

参考:http://www.williamhua.com/2009/04/android-touchscreen-gesture-recogniton/
http://www.cnblogs.com/transmuse/archive/2010/12/02/1894833.html

代码如下:

package com.lp.gesture;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnGestureListener {
	private final static String TAG = "lp";
	private GestureDetector gd;
	private LinearLayout ll;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gd = new GestureDetector(this);
        ll = (LinearLayout)findViewById(R.id.ll);
        //onFling(***)无法触发
        ll.setLongClickable(true);
        
        ll.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				return gd.onTouchEvent(event);
			}
		});
        
    }
    
    
    
	@Override
	public boolean onDown(MotionEvent e) {
		Log.i(TAG, "onDown");
		return false;
	}
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
		Log.i(TAG, "onFling");
		return false;
	}
	@Override
	public void onLongPress(MotionEvent e) {
		Log.i(TAG, "onLongPress");
		
	}
	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
		Log.i(TAG, "onScroll");
		return false;
	}
	@Override
	public void onShowPress(MotionEvent e) {
		Log.i(TAG, "onShowPress");
		
	}
	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		Log.i(TAG, "onSingleTapUp");
		return false;
	}
}


注意:
必须加上
ll.setLongClickable(true);


要不onScroll和onFill都不会触发的


方法介绍:

// 用户轻触点击触摸屏,由1个MotionEvent ACTION_DOWN触发
    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
        return false;
    }
 
    // 用户轻触点击触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
    // 注意和onDown()的区别,强调的是没有松开或者拖动的状态
    //也就说 如果你按下后 立马松开或者拖动 是不会触发的
    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub
    }
 
    // 用户(轻触点击触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
    //只有在点击后 立马松开才会触发 长按 滑动等操作后松开都不会触发
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }
 
    // 用户按下触摸屏、快速移动后松开触发,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发 不一定触发
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        // TODO Auto-generated method stub
        return false;
    }
 
    // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    // 用户按下触摸屏,拖动时触发,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }




测试结果:

1、点击

快速点击:onDown--------》onSingleTapUp
稍微停顿:onDown--------》onShowPress------》onSingleTapUp

2、长按
onDown--------》onShowPress------》onLongPress

3、抛 快速滑动

onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling
或者
onDown-----》onShowPress------》onScroll----》onScroll----》………----->onFling

4、拖动
onDown------》onScroll----》onScroll------》………
或者
onDown-----》onShowPress------》onScroll----》onScroll----》………

但是 这时候 onFling 一般不执行,除非拖动到最后你做一个抛的动作 才会执行




分享到:
评论

相关推荐

    GestureDetector和SimpleOnGestureListener的使用教程

    GestureDetector是Android SDK中的一种手势识别机制,它可以识别多种手势,例如down、up、scroll、filing等。通过GestureDetector的构造方法,可以将SimpleOnGestureListener对象传递进去,从而使GestureDetector...

    安卓Android源码——android相册系统(用Matrix实现).zip

    这个压缩包文件"安卓Android源码——android相册系统(用Matrix实现).zip"包含了一个使用Matrix类来实现的相册系统源码。Matrix是Android图形库中的一个关键类,它允许开发者对图像进行平移、旋转、缩放等变换操作。...

    安卓Android源码——android相册系统(用Matrix实现).rar

    这个压缩包“安卓Android源码——android相册系统(用Matrix实现).rar”显然提供了一个使用Matrix类来实现相册功能的示例代码。Matrix是Android SDK中的一个关键类,用于进行2D图像变换,如旋转、缩放、平移等。接...

    Android手势识别器GestureDetector使用详解

    GestureDetector.SimpleOnGestureListener是一个内部类,实现了GestureDetector.onGestureListener、GestureDetector.onDoubleTapListener、GestureDetector.onContextClickListener三个接口,并实现了它们的方法,...

    安卓Android源码——android 仿真翻页效果.zip

    这个压缩包文件“安卓Android源码——android 仿真翻页效果.zip”包含了实现这种效果的源代码,这对于开发者来说是一个很好的学习资源。 在Android平台上,模拟真实的翻页效果通常涉及到对视图(View)的复杂操作,...

    【Android】滑动屏幕效果GestureDetector、OnGestureListener、ViewFlipper

    `GestureDetector`、`OnGestureListener` 和 `ViewFlipper` 是Android SDK提供的重要组件,用于处理用户的手势输入和视图切换。接下来,我们将详细讨论这三个组件以及如何将它们结合使用来创建滑动屏幕的效果。 `...

    android GestureDetector依赖onTouchEvent判断左右滑动

    当我们需要自定义手势识别逻辑时,通常会扩展`GestureDetector.SimpleOnGestureListener`并覆盖其中的方法。 标题中的“android GestureDetector依赖onTouchEvent判断左右滑动”指的是通过`GestureDetector`监听`...

    Android组件ViewFlipper的使用

    import android.view.GestureDetector.OnGestureListener; import android.view.View.OnTouchListener; import android.view.animation.AlphaAnimation; import android.view.animation.AnimationUtils; import ...

    安卓Android源码——通过手势实现的缩放处理.rar

    public class MultiTouchActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener { private GestureDetector gestureDetector; private...

    Android手势识别GestureDetector分析

    在Android系统中,每一次手势交互都会依照以下顺序执行。 1. 接触接触屏一刹那,触发一个MotionEvent事件。 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。 3. 通过GestureDetector...

    Android GestureDetector实现手势滑动效果

    return gestureDetector.onTouchEvent(event); } }); ``` 通过这种方式,我们成功地实现了滑动手势的检测,当用户在`ImageView`上进行滑动操作时,程序会根据滑动方向显示相应的提示。这种基于`GestureDetector`...

    安卓Android源码——手势检测.zip

    创建一个`GestureDetector`实例,传入一个实现了`GestureDetector.OnGestureListener`接口的对象。在这个对象中,你需要实现上述提到的方法,根据手势行为执行相应的操作。例如: ```java GestureDetector ...

    利用GestureDetector关闭activity

    1. 创建`GestureDetector`实例:创建一个`GestureDetector`对象,通常需要传递一个实现了`GestureDetector.OnGestureListener`接口的匿名内部类或自定义类。这个接口定义了几个方法,如`onDown(MotionEvent event)`...

    安卓Android源码——安卓Android Launcher 桌面分页滑动代码.rar

    4. **GestureDetector**和Scroller:为了实现滑动效果,Android提供了GestureDetector用于识别滑动手势,Scroller则负责平滑滚动动画。TestPagedView可能使用了这两个类来处理用户的滑动输入,并通过改变页面的位置...

    安卓Android源码——(触屏手势识别).rar

    开发者只需实现`GestureDetector.OnGestureListener`接口,重写相关方法即可。 3. **ScaleGestureDetector**: 对于捏合缩放这类手势,Android提供了`ScaleGestureDetector`,可以方便地检测到缩放手势,并提供相应...

    安卓Android源码——Gestures源码.zip

    总之,通过深入研究“安卓Android源码——Gestures源码.zip”中的内容,开发者可以更好地理解和利用Android的手势识别机制,提升应用的交互体验。无论是从源码学习还是通过示例项目实践,都能为你的Android开发技能...

    Android自定义viewgroup可滚动布局 GestureDetector手势监听(5)

    开发者可以创建GestureDetector的实例,并将自定义的GestureDetector.OnGestureListener实现对象传递给它,以监听手势事件。 #### 2. Scroller类的使用 Scroller是Android中用于控制View的滚动的类。通过创建...

    安卓Android源码——超爽的android抽屉效果.zip

    在Android中,这可以通过`GestureDetector`和`OnGestureListener`接口来完成。当用户在屏幕边缘滑动时,这些监听器会捕获滑动事件并触发相应的动作。 3. **Animation API**:为了使抽屉滑动效果更加平滑,开发者会...

    安卓Android源码——触屏手势识别GestureTest.zip

    在`GestureDetector`的初始化中,你需要设置监听器,通常是一个实现了`GestureDetector.OnGestureListener`接口的自定义类。在这个类中,你可以根据手势事件做出响应,比如启动一个新的Activity或更新UI。 `...

Global site tag (gtag.js) - Google Analytics