Activity類: | Activity | dispatchTouchEvent(); onTouchEvent(); |
View容器(ViewGroup的子類): | FrameLayout、LinearLayout…… ListView、ScrollVIew…… |
dispatchTouchEvent(); onInterceptTouchEvent(); onTouchEvent(); |
View控件(非ViewGroup子類): | Button、TextView、EditText…… | dispatchTouchEvent(); onTouchEvent(); |
dispatchTouchEvent() | 用來分派事件。 其中調用了onInterceptTouchEvent()和onTouchEvent(),一般不重寫該方法 |
onInterceptTouchEvent() | 用來攔截事件。 ViewGroup類中的源碼實現就是{return false;}表示不攔截該事件, 事件將向下傳遞(傳遞給其子View); 若手動重寫該方法,使其返回true則表示攔截,事件將終止向下傳遞, 事件由當前ViewGroup類來處理,就是調用該類的onTouchEvent()方法 |
onTouchEvent() | 用來處理事件。 返回true則表示該View能處理該事件,事件將終止向上傳遞(傳遞給其父View); 返回false表示不能處理,則把事件傳遞給其父View的onTouchEvent()方法來處理 |
- 按常理,領導都會把任務向下分派,一旦下面的人把事情做不好,就不會再把後續的任務交給下面的人來做了,只能自己親自做,如果自己也做不了,就只能告訴上級不能完成任務,上級又會重複他的過程。
- 另外,領導都有權利攔截任務,對下級隱瞞該任務,而直接自己去做,如果做不成,也只能向上級報告不能完成任務。
- public class MyActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- Log.d("d", "【總統】任務<" + Util.actionToString(ev.getAction()) + "> : 需要分派");
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- boolean bo = false;
- Log.d("d", "【總統】任務<" + Util.actionToString(ev.getAction()) + "> : 下面都解決不了,下次再也不能靠你們了,哼…只能自己嘗試一下啦。能解決?" + bo);
- return bo;
- }
- }
- public class MyFrameLayout extends FrameLayout
- {
- public MyFrameLayout(Context context, AttributeSet attrs){
- super(context, attrs);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- Log.d("d", "【省長】任務<" + Util.actionToString(ev.getAction()) + "> : 需要分派");
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- boolean bo = false;
- Log.d("d", "【省長】任務<" + Util.actionToString(ev.getAction()) + "> : 攔截嗎?" + bo);
- return bo;
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- boolean bo = false;
- Log.d("d", "【省長】任務<" + Util.actionToString(ev.getAction()) + "> : 市長是個廢物,下次再也不找你了,我自己來嘗試一下。能解決?" + bo);
- return bo;
- }
- }
- public class MyLinearLayout extends LinearLayout{
- public MyLinearLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- Log.d("d", "【市長】任務<" + Util.actionToString(ev.getAction()) + "> : 需要分派");
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- boolean bo = false;
- Log.d("d", "【市長】任務<" + Util.actionToString(ev.getAction()) + "> : 攔截嗎?" + bo);
- return bo;
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- boolean bo = false;
- Log.d("d", "【市長】任務<" + Util.actionToString(ev.getAction()) + "> : 農民真沒用,下次再也不找你了,我自己來嘗試一下。能解決?" + bo);
- return bo;
- }
- }
- public class MyTextView extends TextView
- {
- public MyTextView(Context context, AttributeSet attrs){
- super(context, attrs);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev){
- Log.d("d", "【農民】任務<" + Util.actionToString(ev.getAction()) + "> : 需要分派,我下面沒人了,怎麼辦?自己幹吧");
- return super.dispatchTouchEvent(ev);
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev){
- boolean bo = true;
- Log.d("d", "【農民】任務<" + Util.actionToString(ev.getAction()) + "> : 自己動手,埋頭苦幹。能解決?" + bo);
- return bo;
- }
- }