Android项目----dispathTouchEvent

说到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);

        }

    };

 

你可能感兴趣的:(android)