Android 手势水平监听判断
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 手势水平监听判断的更多相关文章
- android ListView滚动条监听判断滚动到底部还是顶部
代码: lv.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView vie ...
- 【Android】ListView监听上下滑动(判断是否显示返回顶部按钮
设置滚动监听判断ListView的滚动方向同时获取屏幕高度.ListView实际高度,判断是否需要展示返回顶部按钮 package com.zihao.activity; import java. ...
- android的电话监听
android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...
- Android实现网络监听
一.Android Wifi常用广播 网络开发中主体会使用到的action: ConnectivityManager.CONNECTIVITY_ACTION WifiManager.WIFI_STAT ...
- Android中如何监听GPS开启和关闭
转自 chenming 原文 Android中如何监听GPS开启和关闭 摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- WPF - 监听判断键盘组合键的按下
对于键盘事件PreviewKeyDown.PreviewKeyUp.KeyDown.KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性 ...
- Android零基础入门第34节:Android中基于监听的事件处理
原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...
- Android RecyclerView滑动监听,判断是否滑动到了最后一个item
项目中的需求,RecyclerView横向滑动列表,要有加载更多的功能,给RecyclerView设置一个滑动监听,在onScrolled方法中判断一下滑动方向,然后在onScrollStateCha ...
随机推荐
- 欧几里德算法 GCD
递归: int gcd(int a,int b) { ?a:gcd(b,a%b); } 非递归: int gcd(int m,int n) { int r; ) { m=n; n=r; } retur ...
- Qt5+VS2012编程
安装配置 http://www.bogotobogo.com/Qt/Qt5_Visual_Studio_Add_in.php Qt5+GL http://qt-project.org/doc/qt-5 ...
- ecshop mobile 文件介绍
mobile手机端 1.common位置:include\apps\default\common\ function.php show_message 成功跳转页面 其他页面引用 show_m ...
- Realm简单使用小记
一.项目环境:纯OC 载入Realm: pod 'Realm' 二.为了方便调用可以写一个Realm类的分类 #import <Foundation/Foundation.h> #impo ...
- winform只能有一个实例运行且打开已运行窗口
static class Program { private static Mutex onlyOne; [STAThread] static void Main() { onlyOne = new ...
- 捕获EF提交异常
try { } catch (DbEntityValidationException dbex) { string errMsg = string.Empty; foreach (var eve in ...
- python中单引号,双引号,多引号区别
先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s1 = "hello,world"如果要写成多行,那么就要使用\ (“连行符”)吧,如s2 = " ...
- PHP数组处理函数的使用array_map(三)
/*函数array_map()函数:多数组回调函数---将回调函数作用到给定数组的单元上 * 1.语法:array array_map ( callback callback, array arr1 ...
- 使用 Elasticsearch ik分词实现同义词搜索(转)
1.首先需要安装好Elasticsearch 和elasticsearch-analysis-ik分词器 2.配置ik同义词 Elasticsearch 自带一个名为 synonym 的同义词 fil ...
- 将Ubuntu 15.10升级到Ubuntu 16.04
Ubuntu 16.04 LTS 代号为 Xenial Xerus,其最终版将于 2016 年 4 月 21 日正式发布,Ubuntu16.04 将是非常受欢迎的开源操作系统 Ubuntu 的第 6 ...