代码改变世界

理解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)完成对服务器端方法的调用