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 ...
随机推荐
- Flatty Shadow在线为Icon图标生成长阴影效果。
Flatty Shadow在线为Icon图标生成长阴影效果. Flatty Shadow 彩蛋爆料直击现场 Flatty Shadow在线为Icon图标生成长阴影效果.
- shell脚本执行查找进程,然后查杀进程
shell 执行查找进程,然后查杀进程脚本如下: ps -ef | grep 'IOE' |grep -v 'grep'| awk '{print \$2}' |while read pid; do ...
- iOS 应用内付费(IAP)开发步骤
折腾好几天,原来是税务信息没有填写,哎... 国内就是好啊,没有这些麻烦的事情... :) 等24小时,等税务的审核结果... 有结论了 才能测试内购.... 如果税务信息没有填写完毕,p ...
- 超级内存NVDIMM
1.序言 基于非易失性内存(NVDIMM)的新一代内存条规格已经研制成功,其中集成了DRAM和非易失性存储芯片,能够在完全断电的时候完整保存内存数据,并支持主内存在持久高速高性能计算上的应用.区别于普 ...
- 编码,加解密,签名,Hash
工作中会听到各种各样是是而非的词汇,base64,url,sha256,rsa,hash等等,你能很好的分清这些词语吗? 这次我想把它们统一的整理说明下: 一: 编码 编码是信息从一种形式或格式转换为 ...
- android-exploitme(六):基础加密
这次我们看看程序在设备上存储了什么敏感信息 (server-env)sartre:AndroidLabs2 maxim$ adb shell # cd /data/data/com.securityc ...
- uchome 积分体系
一.总体流程 1):管理员在后台修改积分规则2):数据被写入数据表creditrule 中,并将数据写入缓存文件data/data_creditrule.php 中3):用户发表文章或者进行其他操作的 ...
- MMU和TLB
MMU和TLB 记得那家芯片公司给我电话面试的时候,别的都还好,可是他问我什么是MMU,我只能干瞪眼.今天在看<Linux内核源码(陈莉君)>的时候,无意中看到第二章内存地址这一节,学习如 ...
- PHPCMS V9添加模板自定义全局变量
在我们使用PHPCMS V9的制作网站模板的时候,使用全局模板变量能轻松调用,使用起来非常方便,而且可以统一修改,方便维护. 下面就来讲一下在PHPCMS V9中如何添加自定义全局变量. 修改网站sy ...
- Android消息机制之实现两个不同线程之间相互传递数据相互调用
目的:实现两个不同线程之间相互传递数据相互调用方法. 线程一中定义mainHandler 并定义一个方法mainDecode 线程二中定义twoHandler 并定义一个方法twoEncode 实现当 ...