GestureDetector学习之左右滑动,上下滑动屏幕切换页面

要实现滑屏等触发事件,视情况而定;

如果实现的触屏或者手势效果较多,则使用第一种方法,实现OnGestureListener 接口(参考OnGestureListener);

如果只是实现较少的效果,则考虑使用SimpleOnGestureListener(参考SimpleOnGestureListenter);主要分为以下三步:

第一种方法:

1、继承OnTouchListener , OnGestureListener ;

//继承OnTouchListener,OnGestureListener
public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{

 

:此处使用的OnGestureListener来自包 android.view.GestureDetector.OnGestureListener;而不是 android.gesture.GestureOverlayView.OnGestureListener;

2、初始化OnGestureListener ,即注册手势监听 ;获得当前接受操作的布局id ; 注册触屏监听;

//手势监听
mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略
//获得当前接受操作的布局id
RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
//触屏监听
mActivity.setOnTouchListener(this);
mActivity.setLongClickable(true);

 

3、重载onFling()和onTouch();

public boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);
}public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//省略
}


第二种方法如下:

1、继承OnTouchListener  ;

//继承OnTouchListener
public class MainActivity extends Activity implements OnTouchListener{

 

2、初始化OnGestureListener ,即注册手势监听 ;获得当前接受操作的布局id ; 注册触屏监听;

//手势监听
mGestureDetector = new GestureDetector(MainActivity.this,new MySimpleOnGestureListener());//下边定义MySimpleOnGestureListener,//并使其继承SimpleOnGestureListener类
//获得当前接受操作的布局id
RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
//触屏监听
mActivity.setOnTouchListener(this);
mActivity.setLongClickable(true);

3、定义SimpleOnGestureListener子类,并重载onTouch()和所需方法;

class MySimpleGestureListener extends SimpleOnGestureListener{@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}@Overridepublic boolean onDown(MotionEvent e){Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}}

 


具体代码如下:

(第一种方法)

import android.app.Activity;
import android.content.Intent;import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.*;public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{private static final String tag = "mainActivity";private GestureDetector mGestureDetector;private int verticalMinistance = 20;	        //水平最小识别距离private int minVelocity = 10;			//最小识别速度@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//手势监听mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略//获得当前接受操作的布局idRelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);//触屏监听mActivity.setOnTouchListener(this);mActivity.setLongClickable(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){//在此处实现跳转//Intent intent  = new Intent(MainActivity.this,nextActivity.class);//startActivity(intent);Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}//只要有触发就会调用次方法@Overridepublic boolean onDown(MotionEvent e) {Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onLongPress(MotionEvent e) {Toast.makeText(MainActivity.this, "onLongPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {//		Toast.makeText(MainActivity.this, "onScroll", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onShowPress(MotionEvent e) {
//		Toast.makeText(MainActivity.this, "onShowPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onSingleTapUp(MotionEvent e) {
//		Toast.makeText(MainActivity.this, "onsingleTapup", Toast.LENGTH_SHORT).show();return false;}	  
}

 

 

(第二种方法)

import android.app.Activity;
import android.content.Intent;import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.*;public class MainActivity extends Activity implements OnTouchListener{private static final String tag = "mainActivity";private GestureDetector mGestureDetector;private int verticalMinistance = 20;	        //水平最小识别距离private int minVelocity = 10;			//最小识别速度@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//手势监听mGestureDetector = new GestureDetector(MainActivity.this,new LearnGestureListener());//获得当前接受操作的布局idRelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);//触屏监听mActivity.setOnTouchListener(this);mActivity.setLongClickable(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}class LearnGestureListener extends SimpleOnGestureListener{@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();}else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();}else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();}else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();}return false;}@Overridepublic boolean onDown(MotionEvent e){Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();return false;}}}


转载于:https://www.cnblogs.com/jiangu66/p/3202732.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【观点】从曾成杰案看民间金融的高风险与银行缺失的机制创新

7月12日,湖南长沙市中级人民法院对犯有集资诈骗罪的原湖南某地产公司总裁曾成杰执行了死刑。将此案与政策面上近期对支持民间金融市场发展的强调结合在一起,可以让我们对民间金融所面临的困境和未来可能面临的风险有一个更清醒的认识。 民间金融市场脱离…

typescript设置默认值_typescript 属性默认值使用箭头函数 this指向问题

今天注意到前端小伙伴用react 定义component class的方法的时候是通过箭头函数的方式,表示好奇。class Test extends React.Component {public fun1 () > {console.log(this);};fun2() {console.log(this);}}如上代码中fun1的定义方式。于是感到好奇&#xff0c…

mysql递归树函数效率_MYSQL递归树查询的实现

​ 在oracle中我们可以使用connect by prior 函数来实现组织树表递归的查询,但是在mysql中却没有该方法,为了能够使用该方法我们就得自己创建函数来实现该组织树的递归查询。以下实现了2种方式来满足子节点的递归查询与父节点的递归查询。实现子递归查…

poj 4468Spy(kmp算法)

Spy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 204 Accepted Submission(s): 96 Problem Description “Be subtle! Be subtle! And use your spies for every kind of business. ” — Sun Tzu “A spy…

mysql 64位下载 win7_关于Win7 64位 mysql 5.7下载安装问题

1、从官网下载mysql:网址:http://dev.mysql.com/downloads/mysql/这是我们要找的,win7 64位点击下载;出现如图所示,我们不必要登录注册,点击红线内的即可的即可。2、安装及配置:然后解压到本机文…

mysql级联保存_mysql数据库级联同步配置

mysql数据库级联同步配置步骤,本文以一台mysql数据库多实例3306、3307和3309为例进行配置,3306为主库,3307为从库,3309为子从库(多台单实例与一台多实例配置是一样的)一.my.cnf文件配置1.三个数据库实例修改my.cnf配置文件&#x…

C#实现从服务器上下载DLL文件

C#实现从服务器上下载DLL文件,具体代码如下: var fullQualifiedPathToDll Server.MapPath("/") "/bin/mydll.dll"; var myFileStream new FileStream(fullQualifiedPathToDll, FileMode.Open);var fileSize myFileStream.Length…

mysql+数据库主从原理_涨知识!MySQL 主从同步原理原来是这样的

原标题:涨知识!MySQL 主从同步原理原来是这样的什么是 MySQL 主从同步当 master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。主从同步有什么好处水平扩展数据库的负载能力容错,高可用。 Failover/High Availabili…

第三方控件netadvantage UltraWebGrid如何生成带加号多级表数据也就是带子表

1.看代码不解释: ds.Relations.Add("fk", ds.Tables[0].Columns["Id"], ds.Tables[1].Columns["ParentCardId"], false); 将父表和子表放到dataset中通过设置外键关联,这样就会自动绑定上。由于某些原因表不允许自动生成列…

mysql 中int(255)_【数据类型】int ,int(1),int(255)有什么区别?

问题:int(255) 数据类型的容量,比int(1)更多吗?遇到问题,第一反应是去查说明书,可以在mysql document 中找到int这种数据类型的容量是多少,Integer Types (Exact Value)里面只提到了 INT的容量,…

mysql 5.5.28 winx64_mysql-5.7.28-winx64(压缩包)安装教程

1.下载完成后解压放到指定位置我放的C:\Develop\mysql-5.7.28-winx642.在目录下新建  my.ini  内容如下[mysql]# 设置mysql客户端默认字符集default-character-setutf8[mysqld]#设置3306端口port 3306# 设置mysql的安装目录basedirC:\Develop\mysql-5.7.28-winx64# 设置my…

顶级旗舰ET9出道,蔚来还是那个「最不计成本」的中国车品牌

作者 |张祥威 编辑 |德新 2008年,李斌和新浪的曹国伟几人一起喝酒,发了第一条微博,「天冷带围巾,心冷发微博」,一晚上涨了2000多个粉丝,他偶尔还会针砭时事,很快积累了最早一波粉丝。 创立蔚来…

jQuery对checkbox的操作(转载)

$(document).ready(function(){//checkbox全选$(#btn1).click(function(){$("[name checkbox]").attr(checked,true);});//checkbox取消选择$(#btn2).click(function(){$("[name checkbox]").attr(checked,false);});//checkbox反选$(#btn3).click(funct…

mysql5.0 测试_mysql5.0入侵测试以及防范方法分享_MySQL

bitsCN.com在做了之前的SQL SERVER之后,便很想尝试一下MYSQL的入侵测试已经防范,与大家一起分享。总的来说,我一直在用的是MYSQL,对MYSQL比较熟悉,相比较而言,感觉MYSQL更安全,这只是我自己胡乱…

qt 在label上以光标位置进行缩放_Qt编写地图综合应用22-动态轨迹

一、前言上一篇文章写道拿到路径规划的轨迹点坐标集合,并且已经可以通过调用addPolyline绘制线段的形式将轨迹点绘制,接下来就是要如何动态的绘制这些轨迹点,最简单的方法就是开个定时器挨个取出下一个经纬度坐标,然后调用封装好的…

[codility]Min-abs-sum

https://codility.com/demo/take-sample-test/delta2011/ 0-1背包问题的应用。我自己一开始没想出来。“首先对数组做处理,负数转换成对应正数,零去掉,计数排序统计有多少个不同元素及其对应个数,并累加所有数的和sum,…

mysql kettle_带你躲过mysql与kettle闹离婚的坑,开发不迷茫

其实呢kettle配mysql还是蛮不错的,首先人家门当户对,都是开源的哈,其次,kettle也是比较听话的,什么事都以mysql为主,mysql不满意,他就立马报错。那下面就是mysql与kettle闹脾气要离婚的例子啦&a…

poj 1161 最短路构图

题目链接&#xff1a;http://poj.org/problem?id1161 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <vector>#define maxn 400 #define INF 0x3f…