一.view

1、dispatchTouchEvent:

问题1:onTouch还是onTouchEvent先执行?

public boolean dispatchTouchEvent(MotionEvent event){  
    boolean result = false;  
    //如果有事件监听器,先让监听器处理事件。  
    if (mOnTouchListener.onTouch(event)) {  
        //如果监听器成功处理了该事件,处理结果设置为true。  
        result = true;  
    }  
    //如果没有监听器,就调用自身的onTouchEvent方法来处理事件。  
    if (!resutlt && onTouchEvent(event)) {  
        //如果自身的onTouchEvent成功处理事件,处理结果设置为true。  
        result = true;  
    }  
    return result;  
}  

①onTouch优先于onTouchEvent执行,如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行。

②onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。

问题2:onTouch先执行,还是onClick执行?

有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件

mTestButton.setOnClickListener(new View.OnClickListener() {  
           @Override  
           public void onClick(View view) {  
               Log.d(TAG, "onClick execute");  
           }  
});  
mTestButton.setOnTouchListener(new View.OnTouchListener() {  
           @Override  
           public boolean onTouch(View view, MotionEvent motionEvent) {  
               Log.d(TAG, "onTouch execute, action event " + motionEvent.getAction());  
               return false;  
           }  
}); 
View Code

相关文章: