package com.zihao.ui;

 import com.zihao.R;

 import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.Toast; /**
*
* @ClassName: MainActivity
* @Description: Android 手势水平监听判断
* @author zeze
* @date 2015年11月3日 下午4:16:11
*
*/
public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {
// 创建一个用于识别收拾的GestureDetector对象
@SuppressWarnings("deprecation")
private GestureDetector detector = new GestureDetector(this);
// 新建一个LinearLayout布局对象,这里是指主页面的布局
private LinearLayout myLayout; private int FLING_MIN_DISTANCE = 120;// 移动最小距离
private static final int FLING_MIN_VELOCITY = 200;// 移动最大速度
// 定义的Toast提示框显示时间
private int TIME_OUT = 1000;
private static final String TAG = "Main"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLayout = (LinearLayout) findViewById(R.id.test_layout);
// 为布局绑定监听
myLayout.setOnTouchListener(this);
} /**
* 手势滑动时别调用
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d(TAG, "Y:"+(e1.getY() - e2.getY()));
Log.d(TAG, "X:"+(e1.getX() - e2.getX()));
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度(像素/秒)
// velocityY:Y轴上的移动速度(像素/秒)
// X轴的坐标位移大于FLING_MIN_DISTANCE,y轴的坐标位移小于30,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(e1.getY() - e2.getY()) < 100 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// 水平向左滑动
Toast.makeText(this, "向左滑动", TIME_OUT).show();
}
else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(e1.getY() - e2.getY()) < 100 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// 水平向右滑动
Toast.makeText(this, "向右滑动", TIME_OUT).show();
}
return false;
} /**
* 长按时被调用
*/
@Override
public void onLongPress(MotionEvent e) {
Log.d(TAG, "触发长按回调");
// Toast.makeText(this, "触发长按回调", TIME_OUT).show();
} /**
* 滚动时调用
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
} /**
* 在按下动作时被调用
*/
@Override
public boolean onDown(MotionEvent e) {
Log.d(TAG, "按下回调");
// Toast.makeText(this, "按下回调", TIME_OUT).show();
return false;
} /**
* 按住时被调用
*/
@Override
public void onShowPress(MotionEvent e) {
Log.d(TAG, "按住不松回调");
// Toast.makeText(this, "按住不松回调", TIME_OUT).show();
} /**
* 抬起时被调用
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d(TAG, "触发抬起回调");
// Toast.makeText(this, "触发抬起回调", TIME_OUT).show();
return false;
} /**
* 重写OnTouchListener的onTouch方法 此方法在触摸屏被触摸,即发生触摸事件(接触和抚摸两个事件)的时候被调用
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
}
 package com.zihao.ui;

 import com.zihao.R;

 import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.Toast; /**
*
* @ClassName: MainActivity
* @Description: Android 手势水平监听判断
* @author zeze
* @date 2015年11月3日 下午4:16:11
*
*/
public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {
// 创建一个用于识别收拾的GestureDetector对象
@SuppressWarnings("deprecation")
private GestureDetector detector = new GestureDetector(this);
// 新建一个LinearLayout布局对象,这里是指主页面的布局
private LinearLayout myLayout; private int FLING_MIN_DISTANCE = 120;// 移动最小距离
private static final int FLING_MIN_VELOCITY = 200;// 移动最大速度
// 定义的Toast提示框显示时间
private int TIME_OUT = 1000;
private static final String TAG = "Main"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLayout = (LinearLayout) findViewById(R.id.test_layout);
// 为布局绑定监听
myLayout.setOnTouchListener(this);
} /**
* 手势滑动时别调用
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d(TAG, "Y:"+(e1.getY() - e2.getY()));
Log.d(TAG, "X:"+(e1.getX() - e2.getX()));
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度(像素/秒)
// velocityY:Y轴上的移动速度(像素/秒)
// X轴的坐标位移大于FLING_MIN_DISTANCE,y轴的坐标位移小于30,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(e1.getY() - e2.getY()) < 100 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// 水平向左滑动
Toast.makeText(this, "向左滑动", TIME_OUT).show();
}
else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(e1.getY() - e2.getY()) < 100 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// 水平向右滑动
Toast.makeText(this, "向右滑动", TIME_OUT).show();
}
return false;
} /**
* 长按时被调用
*/
@Override
public void onLongPress(MotionEvent e) {
Log.d(TAG, "触发长按回调");
// Toast.makeText(this, "触发长按回调", TIME_OUT).show();
} /**
* 滚动时调用
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
} /**
* 在按下动作时被调用
*/
@Override
public boolean onDown(MotionEvent e) {
Log.d(TAG, "按下回调");
// Toast.makeText(this, "按下回调", TIME_OUT).show();
return false;
} /**
* 按住时被调用
*/
@Override
public void onShowPress(MotionEvent e) {
Log.d(TAG, "按住不松回调");
// Toast.makeText(this, "按住不松回调", TIME_OUT).show();
} /**
* 抬起时被调用
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d(TAG, "触发抬起回调");
// Toast.makeText(this, "触发抬起回调", TIME_OUT).show();
return false;
} /**
* 重写OnTouchListener的onTouch方法 此方法在触摸屏被触摸,即发生触摸事件(接触和抚摸两个事件)的时候被调用
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
}

Android 手势水平监听判断的更多相关文章

  1. android ListView滚动条监听判断滚动到底部还是顶部

    代码: lv.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView vie ...

  2. 【Android】ListView监听上下滑动(判断是否显示返回顶部按钮

    设置滚动监听判断ListView的滚动方向同时获取屏幕高度.ListView实际高度,判断是否需要展示返回顶部按钮 package com.zihao.activity;   import java. ...

  3. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...

  4. Android实现网络监听

    一.Android Wifi常用广播 网络开发中主体会使用到的action: ConnectivityManager.CONNECTIVITY_ACTION WifiManager.WIFI_STAT ...

  5. Android中如何监听GPS开启和关闭

    转自 chenming 原文 Android中如何监听GPS开启和关闭   摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...

  6. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  7. WPF - 监听判断键盘组合键的按下

    对于键盘事件PreviewKeyDown.PreviewKeyUp.KeyDown.KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性 ...

  8. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  9. Android RecyclerView滑动监听,判断是否滑动到了最后一个item

    项目中的需求,RecyclerView横向滑动列表,要有加载更多的功能,给RecyclerView设置一个滑动监听,在onScrolled方法中判断一下滑动方向,然后在onScrollStateCha ...

随机推荐

  1. JS转码

    JS转码是解决XSS漏洞的方案,XSS漏洞是指对dom操作时,出现特殊字符造成的安全泄露. XSS漏洞的主要来源有: 1.URL(需要对url进行encodeURIComponent转码). 2.数据 ...

  2. iOS注册,找回密码时用到的获取验证码

    #import "ViewController.h" #import "NSTimer+BlocksKit.h" @interface ViewControll ...

  3. awk操作数组注意几点

    awk的数组跟其他程序设计语言的数组有所不同:1.可以直接在awk中定义数组:2.数组元素的初始值为0或空字符串,除非他们被显示的指定初始化:3.数组可以自动扩展:4.都是关联数组,数字下标也会转成字 ...

  4. sufeinet

    http://www.sufeinet.com http://tool.sufeinet.com/

  5. mysql 索引及其原理

    mysql 索引 KEY与INDEX的区别: KEY is something on the logical level, describes your table and database desi ...

  6. python mysql

    mysql Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get install python-mysqldb Wi ...

  7. QT读写ini配置文件

        /********下面是写ini文件*************************/     //Qt中使用QSettings类读写ini文件     //QSettings构造函数的第一 ...

  8. Cool Sites

    尽快学习完成这个网页 https://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/ https://msdn.mic ...

  9. Task异常处理

    http://www.cnblogs.com/xray2005/archive/2011/08/24/2151459.html

  10. 基础知识系列☞C#中→属性和字段的区别

    "好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...