GestureDetector手势滑动识别-创新互联

手势识别是我们日常使用电子物品中非常常见的一个功能,这个功能大大提升了用户体验的感受

成都创新互联专注于杜尔伯特企业网站建设,成都响应式网站建设,电子商务商城网站建设。杜尔伯特网站建设公司,为杜尔伯特等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

    手势识别主要有两种方法,一种是GestureDetector,另一种是GestureOverlayView

现在来研究下GestureDetector方法

  1.手指触屏的一瞬间,触发MotionEvent事件

    2.被OnTouchListener监听,在onTouch()中获得MotionEvent对象

    3.GestureDetector转发MotionEvent对象至OnGestureListener

    4.OngestureListener获得该对象,根据该对象封装的信息做出合适的反馈

MotionEvent:

  1. 用于封装手势、触摸笔、轨迹球等动作事件

    内部封装用于记录横轴和纵轴坐标的属性X和Y

    手势的滑动相当于屏幕上的XY轴的坐标的变化

GestureDetector:识别各种手势

当手指:按下、移动、抬起等可通过重载onTouch或者设置setOnTouchListener来监听

原理:当接收到用户触摸消息时,将消息交给GestureDetector加工,通过设置监听器获得GestureDetector处理后的手势

OnGestureListener:手势交互的监听接口,其提供多个抽象方法、根据GestureDetector的手势识别结果调用相对应的方法 ,监听单击事件

OnDoubleTapListener:监听双击事件

OnGestureListener接口的方法太多,没有办法写完,所以只需写一个类,实现所需要的方法即可

单击:onDown、抬起:onSingleTapUp、短按:onShowPress、长按:onLongPress、滚动:onScroll、滑动:onFling

Android提供了一个类SimpleOnGestureListener:我们只需继承这个类,然后重载感兴趣的手势就行

例子代码如下:

package com.gdut.gesturedetector;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.os.Bundle;

import android.view.GestureDetector;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.GestureDetector.SimpleOnGestureListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.Toast;

import android.os.Build;

public class MainActivity extends Activity {

private ImageView img;

private GestureDetector myGestureDetector;

//OnGestureListener接口的方法太多,没有办法写完,所以只需写一个类,实现所需要的方法即可

//android提供了一个类simpleOnGestureListener

class myGestureListener extends SimpleOnGestureListener{

//实现滑动的onFling方法

@Override

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

float velocityY) {

if(e1.getX() - e2.getX() > 50){

Toast.makeText(MainActivity.this, "从右往左滑动!", Toast.LENGTH_SHORT).show();

}else if(e2.getX() - e1.getX() > 50){

Toast.makeText(MainActivity.this, "从左往右滑动!", Toast.LENGTH_SHORT).show();

}

return super.onFling(e1, e2, velocityX, velocityY);

}

}

@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img = (ImageView) findViewById(R.id.img);

//实例化myGestureDetector,并监听

myGestureDetector = new GestureDetector(new myGestureListener());

//向对这张图片进行监听

img.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

//获得的event要通过GestureDetector转发出去给OnGestureListener,OnGestureListener获得该对象,根据该对象封装的信息作出合适的反馈

myGestureDetector.onTouchEvent(event);

return true;

}

});

}

}

但是GestureDetector,有局限,就是只能进行比较少而简单的手势操作。

而比较复杂或者自定义的手势,就由GestureOverlayView实现

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:GestureDetector手势滑动识别-创新互联
标题路径:http://scyanting.com/article/jehii.html