2014-03-24 94 views
3

我有一個父滾動視圖,其中包含一個Horizo​​ntalScrollView作爲其子視圖之一。所有工作都完美無缺,但是當某人觸發垂直滾動時,水平滾動停止或抖動。最重要的是,冰淇淋三明治中存在一些錯誤,如果它位於ScrollView內部,它的內容比屏幕小(在這種情況下,沒有垂直滾動),它無法很好地處理Horizo​​ntalScrollView上的垂直移動。果凍豆android正確處理它,但由於某種原因IceCreamSandwich檢測到垂直移動,並停止水平滾動。Horizo​​ntalScrollView inside ScrollView - 當水平滾動正在進行時禁用垂直滾動

我會如何去做父級scrollView禁用它的垂直滾動,當一個水平滾動被觸發?所以當有人水平滾動Horizo​​ntalScrollView時,手指在Y軸上有點奇怪,我不希望父ScrollView捕捉垂直運動。

任何幫助嗎?

+0

您可以使用下面的代碼 – Hardik

+0

禁用垂直滾動我不想完全禁用垂直滾動。 – Lucas

回答

18

只是試試這個

HorizontalScrollView hv = (HorizontalScrollView)findViewById(R.id.myHsView); // your HorizontalScrollView inside scrollview 
    hv.setOnTouchListener(new ListView.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int action = event.getAction(); 
       switch (action) { 
       case MotionEvent.ACTION_DOWN: 
        // Disallow ScrollView to intercept touch events. 
        v.getParent().requestDisallowInterceptTouchEvent(true); 
        break; 

       case MotionEvent.ACTION_UP: 
        // Allow ScrollView to intercept touch events. 
        v.getParent().requestDisallowInterceptTouchEvent(false); 
        break; 
       } 

       // Handle HorizontalScrollView touch events. 
       v.onTouchEvent(event); 
       return true; 
      } 
     }); 
+0

我做了類似的事,後來我發現了。也就是說,我製作了一個派生控件來覆蓋onTouchIntercepted方法,該方法在action處於Down狀態時向其父節點發送「requestDiasallowInterceptTouchEvent(true)」。那樣做了。既然你花時間幫助我,checkmark是你的。謝謝。 – Lucas

+0

@Hardik從水平滾動視圖或水平列表視圖以外的區域滑動時,它的工作狀況良好。如果我這樣做水平列表視圖只滾動。我試着用int xAxis =(int)v.getX(); int yAxis =(int)v.getY();並檢查ACTION_UP情況下的條件(xAxis

相關問題