1. 程式人生 > >scrollview 與自定義view 一起使用衝突問題

scrollview 與自定義view 一起使用衝突問題

開發過程中會發現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;
    }
});