android中处理各种触摸事件的方法浅谈

感性的QQ00000

感性的QQ00000

2016-02-19 09:37

图老师小编精心整理的android中处理各种触摸事件的方法浅谈希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

Android里有两个类
android.view.GestureDetector
android.view.GestureDetector.SimpleOnGestureListener
(另外android.widget.Gallery好像是更牛x的OnGestureListener )
1)
新建一个类继承SimpleOnGestureListener,HahaGestureDetectorListener
可以实现以下event事件。
boolean onDoubleTap(MotionEvent e)
解释:双击的第二下Touch down时触发
boolean onDoubleTapEvent(MotionEvent e)
解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。
boolean onDown(MotionEvent e)
解释:Touch down时触发
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
解释:Touch了滑动一点距离后,up时触发。
void onLongPress(MotionEvent e)
解释:Touch了不移动一直Touch down时触发
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
解释:Touch了滑动时触发。
void onShowPress(MotionEvent e)
解释:Touch了还没有滑动时触发
(与onDown,onLongPress比较
onDown只要Touch down一定立刻触发。
而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。
所以Touchdown后一直不滑动,onDown-onShowPress-onLongPress这个顺序触发。

boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)
解释:上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。
点击一下非常快的(不滑动)Touchup:
onDown-onSingleTapUp-onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown-onShowPress-onSingleTapUp-onSingleTapConfirmed
2)在view的新建一个GestureDetector的对象。
构造函数里
gestureDetector = new GestureDetector(new HahaGestureDetectorListener());
然后在View的onTouchEvent里以下这样用,就可以在刚才1)弄的事件里写自己的代码了。
代码如下:

@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
}
mTouchListener = new OnTouchListener() {
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 // TODO Auto-generated method stub
 float x = event.getXPrecision()*event.getX()+event.getX();
 float y = event.getYPrecision()*event.getY()+event.getY();
 switch (event.getAction()) {
 case MotionEvent.ACTION_DOWN:

 break;
 case MotionEvent.ACTION_MOVE:
 mTouchTimes++;
 if (mTouchTimes TOUCH_TIMES) {
// 根据方向计算角度
 if (mCurrentOrientation==DeviceOrientation.Landscape) {
 mAngle = Math.toDegrees(Math.atan2(y - 480 / 2, x))+90;
 } else {
 mAngle = -Math.toDegrees(Math.atan2(y - 480 / 2, 320-x))+90;
 }

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

 Log.w("angle", "mangle:"+mAngle);
 }
 break;
 case MotionEvent.ACTION_UP:
 if (mTouchTimes TOUCH_TIMES) {

 } else {

 }
 mTouchTimes = 0;
 break;
 default:
 break;
 }
 return true;
 }
 };
mView.setOnTouchListener(mTouchListener);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

android中处理各种触摸事件的方法浅谈

编程语言 网络编程
android中处理各种触摸事件的方法浅谈

JavaScript中的事件处理

Web开发
JavaScript中的事件处理

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Android的Touch事件处理机制介绍

编程语言 网络编程
Android的Touch事件处理机制介绍

VB程序中处理随机事件

编程语言 网络编程
VB程序中处理随机事件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

宝宝发烧的各种处理方法

电脑网络
宝宝发烧的各种处理方法

在VB程序中处理随机事件

编程语言 网络编程
在VB程序中处理随机事件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

瑞星杀毒软件V16"内核加固"功能

瑞星杀毒软件V16"内核加固"功能

mssql 指定字段编号sql语句

mssql 指定字段编号sql语句
下拉加载更多内容 ↓