scrollview 与自定义view 一起使用冲突问题

来源:互联网 发布:y2电机技术数据大全 编辑:程序博客网 时间:2024/06/06 06:50

开发过程中会发现scrollview 与自定义view 一起使用时,自定义view有左右或者上下滑动功能时,会有冲突,也就是说自定义view的触摸时间失效了,这是因为android机制默认父view的触摸优先级别高(如有错欢迎指正),那么如何解决呢,通过学习前辈高手的代码我们只要重写我们自定义view的触摸时间就可以了:

int mPosX,mPosY,mCurrentPosX,mCurrentPosY;

mDocView.setOnTouchListener(new View.OnTouchListener(){    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                mPosX = (int)event.getX();                mPosY = (int)event.getY();                Log.d("mCurrentPosX", "按下位置"+mPosX+"移动位置");               frgtChDetailScroll.getParent().requestDisallowInterceptTouchEvent(true);            case MotionEvent.ACTION_MOVE:   //表示父类需要                mCurrentPosX = (int)event.getX()-mPosX;                mCurrentPosY = (int)event.getY()-mPosY;                mPosX = (int)event.getX();                mPosY = (int)event.getY();                Log.d("mCurrentPosX", "mCurrentPosX位置"+mCurrentPosX+"mPosX位置"+mPosX);                Log.d("mCurrentPosX", "mCurrentPosY位置"+mCurrentPosY+"mPosX位置"+mPosY);        if (mCurrentPosX > 0 )        {            v.getParent().requestDisallowInterceptTouchEvent(true);            Log.d("mCurrentPosX", "向右的按下位置"+mPosX+"移动位置"+mCurrentPosX);        }        else if (mCurrentPosX < 0 )        {            v.getParent().requestDisallowInterceptTouchEvent(true);            Log.d("mCurrentPosX", "向左的按下位置"+mPosX+"移动位置"+mCurrentPosX);        }        else if (mCurrentPosY > 0 )        {            v.getParent().requestDisallowInterceptTouchEvent(false);           // Logger.d( "向下的按下位置"+mPosX+"移动位置"+mCurrentPosX);            Log.d("mCurrentPosX", "向下的按下位置"+mPosX+"移动位置"+mCurrentPosX);        }        else if (mCurrentPosY < 0 )        {            v.getParent().requestDisallowInterceptTouchEvent(false);            Log.d("mCurrentPosX", "向上的按下位置"+mPosX+"移动位置"+mCurrentPosX);        }            case MotionEvent.ACTION_UP:                frgtChDetailScroll.getParent().requestDisallowInterceptTouchEvent(true);            default:                break;        }
// 判断自定义view是否空的逻辑,对自定义view进行焦点获取设置,mDocView是我的自定义view,        if(buffer==null){        }else {
                        mDocView.setFocusable(true);            mDocView.setFocusableInTouchMode(true);            mDocView.requestFocus();        }        return false;    }});

原创粉丝点击