GestureDetector简单使用
2017-02-28 00:59
141 查看
话说onTouch也可以记录按下抬起等简单的手势,但是太过简单且考虑到生命周期等的原因,故google专门为我们提供了一个手势类(GestureDetector)
它有两个接口 :
1.OnGestureListener
2.SimpleOnGestureListener
区别在于第一个是完整的所有手势,第二个顾名思义就是简单的,常用的手势
```
GestureDetector gdt=new GestureDetector(mContext, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
//用户按下屏幕就会触发;
return false;
}
@Override
public void onShowPress(MotionEvent e) {
//如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
//一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
@Override
public void onLongPress(MotionEvent e) {
//长按
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 滑屏,用户按下触摸屏、快速移动后松开
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
});
```
定义好上面的代码。最后在Activity中的onTouch中将事件交给GestureDetector就可以了
```
public boolean onTouch(View v, MotionEvent event) {
return gdt.onTouchEvent(event);
}
```
如何在Fragment中使用GestureDetector?
思路:在Activity中创建接口,将onTouch的事件传递到接口的方法,调用方在实现接口并传入自己的GestureDetector即可
1.创建接口:
```
//在Activity的dispatchTouchEvent方法中将event事件传递给实现接口的那一方
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
//绑定监听
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
//取消监听
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
```
2.在Fragment中使用手势
```
/**创建手势*/
gdt = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
shifoushuaxing = fa
9f55
lse;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
shifoushuaxing = true;
return true;
}
});
//实现接口
MainActivity.MyOnTouchListener myOnTouchListener = new MainActivity.MyOnTouchListener() {
@Override
public boolean onTouch(MotionEvent ev) {
boolean result = gdt.onTouchEvent(ev);
return result;
}
};
//绑定
((MainActivity) getActivity())
.registerMyOnTouchListener(myOnTouchListener);
```
它有两个接口 :
1.OnGestureListener
2.SimpleOnGestureListener
区别在于第一个是完整的所有手势,第二个顾名思义就是简单的,常用的手势
```
GestureDetector gdt=new GestureDetector(mContext, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
//用户按下屏幕就会触发;
return false;
}
@Override
public void onShowPress(MotionEvent e) {
//如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
//一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
@Override
public void onLongPress(MotionEvent e) {
//长按
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 滑屏,用户按下触摸屏、快速移动后松开
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
return false;
}
});
```
定义好上面的代码。最后在Activity中的onTouch中将事件交给GestureDetector就可以了
```
public boolean onTouch(View v, MotionEvent event) {
return gdt.onTouchEvent(event);
}
```
如何在Fragment中使用GestureDetector?
思路:在Activity中创建接口,将onTouch的事件传递到接口的方法,调用方在实现接口并传入自己的GestureDetector即可
1.创建接口:
```
//在Activity的dispatchTouchEvent方法中将event事件传递给实现接口的那一方
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
//绑定监听
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
//取消监听
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
```
2.在Fragment中使用手势
```
/**创建手势*/
gdt = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
shifoushuaxing = fa
9f55
lse;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
shifoushuaxing = true;
return true;
}
});
//实现接口
MainActivity.MyOnTouchListener myOnTouchListener = new MainActivity.MyOnTouchListener() {
@Override
public boolean onTouch(MotionEvent ev) {
boolean result = gdt.onTouchEvent(ev);
return result;
}
};
//绑定
((MainActivity) getActivity())
.registerMyOnTouchListener(myOnTouchListener);
```
相关文章推荐
- GestureDetector 简单使用
- GestureDetector手势识别的简单使用
- 简单描述ListView中使用GestureDetector冲突的解决办法
- Android编程使用GestureDetector实现简单手势监听与处理的方法
- Android手势GestureDetector的简单使用
- android Scroll及GestureDetector的简单使用
- GestureDetector的简单使用
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(1)Calendar概述
- c#中类的简单使用学习
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(2)JCalendar源代码
- SpringFramework中的AOP简单使用
- 对MSNP9协议的简单使用示例
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- 在自己的MIS系统使用简单的加密功能加密基本数据
- python中使用状态机的简单例子---截取'/x00'之前的字符串
- 使用C#开发一个简单的P2P应用
- 使用Java实现对dbf文件的简单读写
- Log4j日志管理系统简单使用说明
- 在ASP中使用简单Java类
- 简单使用Delphi中的TO-DO List