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 ...
随机推荐
- 《CSS3实战》读书笔记 第三章:选择器:样式实现的标记
第三章:选择器:样式实现的标记 选择器的魔力在于,让你完全实现对网页样式的掌控.不同的选择器可以用在不同的情况下使用.总之把握的原则是:规范的编码,根据合理地使用选择器,比去背选择器的定义有价值的多. ...
- QQ客服出现“企业QQ在线咨询无权限在当前场景使用!” 问题
加入了QQ“多客服”功能 会出现这个问题 解决办法: 在平台http://wp.qq.com/ 上设置,只需两步骤 步骤一:在http://wp.qq.com/set.html 里,安全级别选项,选择 ...
- UML关系图
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...
- ul li 下的元素内容垂直居中
CSS: <style> * {;; } li { list-style: none; } li span { border: 1px solid red; height: 100px; ...
- [asp.net core]project.json(2)
摘要 上篇文章介绍了project.json中的一部分属性.属性真的比较多,所以分开了,考虑到其中的英文比较简单,也不再进行翻译了,从英文原文中,直接粘贴过来了. project.json(1) pr ...
- jupyter notebook + pyspark 环境搭建
安装并启动jupyter 安装 Anaconda 后, 再安装 jupyter pip install jupyter 设置环境 ipython --ipython-dir= # override t ...
- WCF binding的那些事!!!
原文地址:http://www.cnblogs.com/Anima0My/archive/2008/04/16/1156146.html WCF中常用的binding方式: BasicHttpBind ...
- 快速切换IP的批处理!
内容如下: @echo off color 1A Title [SMART专用 IP设置V1.0] cls echo. echo SMART专用 IP设置V1.0 %date%%time% echo. ...
- GATK软件介绍
背景介绍 GATK全称是The Genome Analysis Toolkit,是Broad Institute(The Broad Institute, formerly the Broad Ins ...
- java web上传下载乱码问题解决方法
文件下载中文乱码,因为http请求url和header要求只能通过ascii码,对于其他字符则不行,需要转码.而不同浏览器的处理方式右不一样. 解决方法一: /** * 乱码解决 * @throws ...