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;
}
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);
相关文章
android studio 的下拉菜单Spinner使用详解
这篇文章主要介绍了android studio 的下拉菜单Spinner使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12Android在Sqlite3中的应用及多线程使用数据库的建议(实例代码)
这篇文章主要介绍了Android在Sqlite3中的应用及多线程使用数据库的建议,包括编写数据库具体操作类、增删改查,通过实例代码介绍了在实际中的应用,需要的朋友可以参考下2022-04-04Android基于Mapbox V10 绘制LineGradient轨迹
这篇文章主要介绍了Android基于Mapbox V10 绘制LineGradient轨迹,文章通告介绍一些V10上的用法,最终讲下如何绘制渐变运动记录轨迹,感兴趣的小伙伴可以参考一下2022-08-08详解Android 在 ViewPager 中使用 Fragment 的懒加载
本篇文章主要介绍了Android 在 ViewPager 中使用 Fragment 的懒加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06Android XmlPullParser 方式解析 Xml 文档
这篇文章主要介绍了Android XmlPullParser 方式解析 Xml 文档的相关资料,需要的朋友可以参考下2017-06-06
最新评论