android事件系列-onTouch事件与手势操作

onTouch事件
onTouch的参数
几个重要方法的说明:
onTouch的返回值
实践
class MyOnTouch implements OnTouchListener{
int[] temp = new int[] { 0, 0 };
Boolean ismove = false;
int downX = 0;
int downY = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventaction = event.getAction();
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch (eventaction) {
case MotionEvent.ACTION_DOWN: // touch down so check if the
temp[0] = (int) event.getX();
temp[1] = y - v.getTop();
downX = (int) event.getRawX();
downY = (int) event.getRawY();
ismove = false;
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
v.layout(x - temp[0], y - temp[1], x + v.getWidth() - temp[0], y - temp[1] + v.getHeight());
if (Math.abs(downX - x) > 10 || Math.abs(downY - y) > 10)
ismove = true;
break;
case MotionEvent.ACTION_UP:
if (!ismove)
Toast.makeText(MainActivity.this, "你点击了这个按钮", Toast.LENGTH_LONG).show();
break;
}
return false;
}
}
然后在给按钮初始化的时候设置这个事件
touchButton.setOnTouchListener(new MyOnTouch());
手势操作
方法说明:
实践
class MyGesture implements OnTouchListener, OnGestureListener {
GestureDetector myGesture = new GestureDetector(MainActivity.this,this);
View view = null;
int[] temp = new int[] { 0, 0 };
@Override
public boolean onTouch(View v, MotionEvent event) {
//这一步只是我的强迫症而已,因为onTouch事件是不断被调用的
if(view == null)
view = v;
myGesture.onTouchEvent(event);
return false;
}
//在按下时调用
@Override
public boolean onDown(MotionEvent e) {
temp[0] = (int) e.getX();
temp[1] = ((int) e.getRawY()) - view.getTop();
return false;
}
//手指在触摸屏上迅速移动,并松开的动作。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
//长按的时候调用
@Override
public void onLongPress(MotionEvent e) {
}
//按住然后滑动时调用
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
int x = (int) e2.getRawX();
int y = (int) e2.getRawY();
view.layout(x - temp[0], y - temp[1], x + view.getWidth() - temp[0], y - temp[1] + view.getHeight());
return false;
}
// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
@Override
public void onShowPress(MotionEvent e) {
}
// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_LONG).show();
return false;
}
}
然后在使用的时候给我们的按钮设置进去就好了
touchButton.setOnTouchListener(new MyGesture());
在内部类的开头初始化我们的GestureDetector 处理类
GestureDetector myGesture = new GestureDetector(MainActivity.this,this);
[Java] 纯文本查看 复制代码
?
1
GestureDetector myGesture = new GestureDetector(MainActivity.this,this); 在onTouch方法中调用GestureDetector 的方法 [Java] 纯文本查看 复制代码
?
1
myGesture.onTouchEvent(event); 关于按钮功能的说明:
可以拖动的按钮,这个功能的核心代码是 [Java] 纯文本查看 复制代码
?
1
v.layout(x - temp[0], y - temp[1], x + v.getWidth() - temp[0], y - temp[1] + v.getHeight()); 在滑动事件中调用 [Java] 纯文本查看 复制代码
?
1
view.layout(int l, int t, int r, int b)
android事件系列-onTouch事件与手势操作的更多相关文章
- Android开发系列之事件拦截机制
对于Android开发者来说理解事件传递机制的重要性,我想应该是不言而喻的.在一个Activity里面,我们经常会重写onTouchEvent事件,可是重写结束之后,对于是返回true还是返回fals ...
- 移动端touch触摸事件(滑动效果和手势操作)
一.定义 ①touch是移动端的触摸事件,而且是一组事件,主要有以下事件: touchstart 事件:当手指触摸屏幕的时候触发 touchmove 事件:当手指在屏幕来回滑动的时候触发 touche ...
- Android开发手记(30) 触摸及手势操作
触摸操作在现在智能手机系统中起到举足轻重的作用,本文将对安卓中的触摸以及一些简单手势的操作进行简单的介绍. 1.触摸 首先是关于触摸的判断,有两种方法可以判断的触摸操作. (1)setOnTouchL ...
- Android中各种onTouch事件
Android里有两个类 android.view.GestureDetector android.view.GestureDetector.SimpleOnGestureListener 1) 新建 ...
- Android View的onTouch和onClick和onLongClick事件
这三个事件的调用顺序是: onTouch->onLongClick->onClick 先看这三个事件的处理函数: public boolean onTouch(View v, Motion ...
- Android学习指南之三十八:Android手势操作编程[转]
手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中 ...
- Android 触摸及手势操作GestureDetector
现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘.无鼠标的手机系统带来了很多的便利.当用户触摸屏幕时会产生很多的触摸事件,down.up.move等等. ...
- Android onTouch事件传递机制
Android onTouch事件介绍: Android的触摸事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION ...
- android ontouch事件分发机制
最近开发一个项目中,banner图左右切换和下拉刷新手势有冲突,为此去研究了事件分发,网上资料一大抄,有些讲的不对有些讲的不全,结合了网上一些博文以及源码总结如下 一个完整的触摸事件包含down,m ...
随机推荐
- js-jQuery对象与dom对象相互转换
http://blog.csdn.net/jueshengtianya/article/details/8823091 核心提示:jquery选择器得到的jquery对象和标准的 javascri ...
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Se ...
- Android /data/data/app_file/目录下面安装apk无权限问题
当识别SDCard的时候 String filePath = null; String state = Environment.getExternalStorageState(); if (state ...
- 【poj2891-Strange Way to Express Integers】拓展欧几里得-同余方程组
http://poj.org/problem?id=2891 题意:与中国剩余定理不同,p%ai=bi,此处的ai(i=1 2 3 ……)是不一定互质的,所以要用到的是同余方程组,在网上看到有人称为拓 ...
- [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。
遇到的情景: sta.executeUpdate("insert into 表1(longitude,latitude,time) values("+a[0]+",&qu ...
- python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字 ...
- Spring笔记——配置Hibernate框架事务
原文:http://www.iteye.com/topic/1123347 Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这 ...
- (CentOS) 程序安装包管理:yum
简介: Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器 ...
- c# 计算1-100之间的所有整数的和
求1-100所有整数和: class Program { static void Main(string[] args) { ,); Console.WriteLine("1-100之间所有 ...
- Ubuntu下搭建java开发环境
JDK安装: 1. 在http://www.oracle.com/technetwork/java/javase/downloads/index.html上下载相应版本的JDK环境,这里我使用的是jd ...