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. JavaScript学习笔记——DOM_document对象

    javascript-document对象详解 DOM document(html xml) object modledocument对象(DOM核心对象) 作用: 1.内容 innerHTML 2. ...

  2. Android学习笔记——button_activity

    工程的功能是实现在一个acticity上点击按钮,切换到另外一个activity 以下代码为MainActivity.java中的代码 package com.example.button_activ ...

  3. 使用mybatis-generator自动生成model、dao、mapping文件

    参考文献:http://www.cnblogs.com/smileberry/p/4145872.html 一.所需库 1.mybatis-generator库 2.连接DB的驱动(此以mysql为例 ...

  4. JS控制图片显示的大小(图片等比例缩放)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Session的SqlServer模式的配置

    很多时候,由于各种莫名其妙的原因,会导致session丢失.不过ASP.NET还允许将会话数据存储到一个数据库服务器中,方法是将mode属性变成SqlServer. 在这种情况下,ASP.NET尝试将 ...

  6. C-全局变量与局部变量

  7. 开源项目管理平台*redmine*的架设

    yum -y install ruby yum install rubygems gem install heroku gem install rack -v=1.0.1 gem install ru ...

  8. gradle init.gradle的文件配置 使用

    init.gradle文件在build开始之前执行,所以你可以在这个文件配置一些你想预先加载的操作例如配置build日志输出.配置你的机器信息,比如jdk安装目录,配置在build时必须个人信息,比如 ...

  9. unzip 命令使用

    http://blog.sina.com.cn/s/blog_6c9d65a10100nzqf.html unzip命令:解压缩文件 他是解压zip压缩的文件,和zip互逆的一对工具.   命令: u ...

  10. 【AngularJS】—— 3 我的第一个AngularJS小程序

    通过前面两篇的学习,基本上对AngularJS的使用有了一定的了解. 本篇将会自己手动写一个小程序,巩固下理解. 首先要注意的是,引用AngularJS的资源文件angular.min.js文件. 由 ...