一.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; } });