理解GestureDetector
2015-03-18 10:24 徐亮 阅读(144) 评论(0) 编辑 收藏 举报先来一个手势监听器
public interface OnGestureListener {
boolean onDown(MotionEvent e);
}
创建一个activity
public class MainActivity extends Activity {
GestureDetector detector;
OnGestureListener listener=new OnGestureListener() {
public boolean onDown(MotionEvent e) {
doSomething();
return false;
}
}
protected void onCreate(Bundle savedInstanceState) {
detector=new GestureDetector(this, listener);
}
当该activity被点击时会触发手势检测器的onTouchEvent
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
}
}
GestureDetector类的最简形式
public calss GestureDetector{
private OnGestureListener mListener;
public GestureDetector(Context context,OnGestureListener listener){
this.mListener=listener;
}
public boolean onTouchEvent(MotionEvent ev) {
case MotionEvent.ACTION_DOWN:
mListener.onDown(ev); //该行代码对应于创建的activity的OnGestureListener的doSomething();
break;
}
}
}
作为一种静态语言,java无法动态的为对象添加方法,但是Java通过接口提供了一种很好的机制来让我们达到回调的效果。
现在有一个这样的场景,GestureDetector类(服务器类)需要根据用户的手势做出响应应,但是又不知道具体doString()
于是服务器类就持有一个OnGestureListener 对象。
然后客户端类Activity 使用new GestureDetector(this, listener)传递一个携带doString()的OnGestureListener接口给服务器类。
接着调用detector.onTouchEvent(event)完成对服务器端方法的调用