Android高级UI GestureDetector监听各种手势

原创 2016年05月30日 13:18:41

内容

第一部分:介绍GestureDetector
第二部分:改造之前用ViewFlipper实现的实例,使用GestureDetector实现图片切换功能。

要点

  1. 实现接口OnTouchListener,在onTouch()方法中由GestureDetector接管事件
  2. 接口OnGestureListener
  3. 接口OnDoubleTapListener
  4. 静态类SimpleOnGestureListener
    实现了2、3两个接口,却没有做具体事情。可以继承该类,需要哪个就override哪个部分。

xml

一般的布局即可

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gesture_detector_linearlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.feather.androiddemos.GestureDetectorActivity">

</LinearLayout>

Java中使用GestureDetector

推荐使用SimpleOnGestureListener

//实现OnTouchListener
public class GestureDetectorActivity extends AppCompatActivity implements View.OnTouchListener{

    private LinearLayout linearLayout;
    private GestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gesture_detector);

        linearLayout = (LinearLayout) findViewById(R.id.gesture_detector_linearlayout);//获取该布局
        linearLayout.setOnTouchListener(this);//设置监听器

        //获取GestureDetector
        gestureDetector = new GestureDetector(this,
                new SimpleOnGestureListener() //下面实现的class(类)
        );
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        gestureDetector.onTouchEvent(event); //由GestureDetector进行接管,消耗掉event
        return false;
    }

    //继承静态类,重写相应方法
    class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener{

         @Override//该方法就是按下时触发,此外还有近十种方法
        public boolean onDown(MotionEvent e) {
            Toast.makeText(GestureDetectorActivity.this, "onDown", Toast.LENGTH_SHORT).show();
            return super.onDown(e);
        }
    }
}

ViewFliper和GestureDetector实现图片切换

之前ViewFliper教程链接如下:http://blog.csdn.net/feather_wch/article/details/51535660

我们将在本教程基础上进行修改:
ViewFlipperActivity中置换为如下内容即可

public class ViewFlipperActivity extends AppCompatActivity implements View.OnTouchListener{

    ViewFlipper viewFlipper = null; //ViewFlipper控件
    GestureDetector gestureDetector = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_flipper);

        viewFlipper = (ViewFlipper) findViewById(R.id.ViewFlipper);//获取自动切换
        viewFlipper.setOnTouchListener(this);

        gestureDetector = new GestureDetector(this, new SimpleOnGestureListener()); //初始化GestureDetector
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) { //触屏
        //使用GestureDetector

        gestureDetector.onTouchEvent(event); //GestureDetector接管触屏按键
        return false;
    }

    //继承静态类,重写相应方法
    class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener{

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

            if(e2.getX() - e1.getX() > 100)//从左向右
            {
                //设置切换动画
                viewFlipper.setInAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_right_in));
                viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_right_out));
                //显示上一个View
                viewFlipper.showPrevious(); //从左向右,显示上一幅图片
            }else if(e1.getX() - e2.getX() > 100)
            {
                //设置切换动画
                viewFlipper.setInAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_left_in));
                viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(ViewFlipperActivity.this, R.anim.push_left_out));

                viewFlipper.showNext(); //从左向右,显示下一幅图片
            }
            return true;
        }

        public SimpleOnGestureListener() {
            super();
        }
    }
}
版权声明:本文为博主原创文章,可以转载,但恳请标注上转载自(猎羽)的博客并且附上链接,谢谢!

触摸事件与手势监听--Android GestureDetector详解

目录 事件监听的方法 GestureDetector类 GestureDetector使用方法 GesturetDetector.OnGestureListener 接口 GesttureDetect...
  • hpk1994
  • hpk1994
  • 2016年04月23日 00:10
  • 8256

GestureDetector封装手势检测上下滑动

项目中需要检测ListView的上滑下滑隐藏顶部View控件,之前在网上也有很多实现案例。在git上发现个封装很不错的例子,记录下来。 GestureDetector是一个手势检测类,内部有...
  • fancylovejava
  • fancylovejava
  • 2015年06月23日 10:25
  • 1931

android使用GestureDetector实现手势下滑与ListView onTouchEvent 冲突问题 解决

在实际开发中你可能需要把ListView中的onTouchEvent写在Activity中进行操作,或者是同时存在对ListView或者Activity的不同向操作(例如向左右向上下滑动绑定不同事件)...
  • u012000060
  • u012000060
  • 2015年09月29日 14:05
  • 1330

Android 简单的手势处理+监听的处理,用GestureDetector

添加手势识别监听步骤: 一、给相应的控件添加触摸监听事件, 二、利用GestureDetector转发这个触摸事件。 三、事先定义好一个实现simpleongestureListener这个监听的接口...
  • ITzhongzi
  • ITzhongzi
  • 2016年07月07日 16:26
  • 218

Android手势监听类GestureDetector的使用

文章转自:http://www.cnblogs.com/sw926/p/3208158.html在使用自定义视图的时候,对触屏事件的处理是必不可少的,有能力的可以自己写代码处理,这样更加的灵活。如果不...
  • zcn596785154
  • zcn596785154
  • 2017年12月08日 16:17
  • 47

Android开发-自定义View-AndroidStudio(九)手势监听类GestureDetector

转载请注明出处:http://blog.csdn.net/iwanghang/ 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 由于我自己对手势监听类没什么概念,用过很多次,但是没有完整的了解过,...
  • iwanghang
  • iwanghang
  • 2016年12月21日 14:57
  • 769

Android手势监听(GestureDetector类)

public class GestureTest extends Activity implements OnClickListener, OnGestureListener { // 定义手势检测...
  • pengkv
  • pengkv
  • 2014年12月25日 21:19
  • 939

Android手势监听类GestureDetector的使用

在使用自定义视图的时候,对触屏事件的处理是必不可少的,有能力的可以自己写代码处理,这样更加的灵活。如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用。G...
  • Andybfw
  • Andybfw
  • 2017年02月07日 10:55
  • 99

Android手势监听类GestureDetector

GestureDetector类及其用法 Android sdk 给我们提供了GestureDetector(Gesture:手势,Detector:识别)类,通过这个类我们可以识别很多的手势,...
  • lzt623459815
  • lzt623459815
  • 2013年01月04日 18:13
  • 17553

触摸事件与手势监听--Android GestureDetector详解

目录 事件监听的方法 GestureDetector类 GestureDetector使用方法 GesturetDetector.OnGestureListener 接口 GesttureDetect...
  • zhencheng20082009
  • zhencheng20082009
  • 2017年03月07日 13:53
  • 154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android高级UI GestureDetector监听各种手势
举报原因:
原因补充:

(最多只允许输入30个字)