说到dispathTouchEvent,就不得不说一个最贱的屏幕触摸动作触发的一些列Touch事件:
ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP
在Android系统中每个View的额子类都有三个和TouchEvent处理相关的方法
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
如果要控制一个面板在触发屏幕的时候显示,就只需要绑定一个控件去控制就可以了。
@Override public boolean dispatchTouchEvent(MotionEvent ev) { showRightPanel(); return super.dispatchTouchEvent(ev); } /** * 显示右边面板 */ public void showRightPanel(){ if (!mShowing) {//如果此时面板没有显示,就让他显示出来 rightPanel.setVisibility(View.VISIBLE); mShowing = true; } Message msg = handler.obtainMessage(contants.FADE_OUT); handler.removeMessages(contants.FADE_OUT); handler.sendMessageDelayed(msg,contants.DEFAULTTIMEOUT); } /** * 隐藏右侧面板 */ public void hideRightPanel(){ if (mShowing) { handler.removeMessages(1); rightPanel.setVisibility(View.GONE); mShowing = false; } }
@Override public boolean dispatchTouchEvent(MotionEvent ev) { showRightPanel(); return super.dispatchTouchEvent(ev); } /** * 显示右边面板 */ public void showRightPanel(){ if (!mShowing) {//如果此时面板没有显示,就让他显示出来 rightPanel.setVisibility(View.VISIBLE); mShowing = true; } Message msg = handler.obtainMessage(contants.FADE_OUT); handler.removeMessages(contants.FADE_OUT); handler.sendMessageDelayed(msg,contants.DEFAULTTIMEOUT); } /** * 隐藏右侧面板 */ public void hideRightPanel(){ if (mShowing) { handler.removeMessages(1); rightPanel.setVisibility(View.GONE); mShowing = false; } }
Handler handler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case contants.FADE_OUT: hideRightPanel(); break; case contants.SHOW_PROGRESS: if (mShowing) { msg = obtainMessage(contants.SHOW_PROGRESS); sendMessageDelayed(msg,1000); } break; } super.handleMessage(msg); } };