2013-07-16 18 views
7

私はスクロールビュー内にスクロールビューを持っています。 XMLは円滑にスクロールしないで、この第二scrollviewでこのアンドロイドのスクロールビュー内のスクロールビュー

<RelativeLayout .... 
    <ScrollView..... 
     <RelativeLayout .... 
      <Button..... 
      <Button .... 
      <ScrollView 
      <RelativeLayout .... 
       .......... 
       </RelativeLayout> 
      </ScrollView> 
     </RelativeLayout> 
    </ScrollView> 
</RelativeLayout> 

ようなものです。それを解決することができます。私はインターネット上で多くのソリューションを試しましたが、動作しませんでした。

+3

私はいけないscrollview内部のスクロールビューが – KOTIOS

+0

に動作すると思いますuが私に言うことができます正確なrequirmrnt – KOTIOS

+2

2つのscrollViewsが同じ方向にスクロールするのは良い練習ではありません。 –

答えて

20

このコードを試してください。

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 
    findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
return false; 
} 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 

// Disallow the touch request for parent scroll on touch of 
// child view 
v.getParent().requestDisallowInterceptTouchEvent(true); 
return false; 
} 
});` 
+0

完全に働いた、ありがとう! – deimos1988

+0

これは私が気にしていることですが、childScrollViewは私が何をしてもオンタッチを受け取ることはありません。 – SjoerdvGestel

+0

ありがとうございました。 –

5

別の解決策は、私はそれが私のために動作しませんでしたので、Deepthiのソリューションを改善しなければならなかった

public class NoInterceptScrollView extends ScrollView { 

    public NoInterceptScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return false; 
    } 

} 
+0

私はもっと簡単な解決策としてこれを好むでしょう –

+0

あなたは私のヒーローです! – Draelach

+0

完璧な..長い闘いの後、私はこれが良いと最高です..簡単に.. – Brendon

0

親クラスとしてこのクラスを使用することですme`のために働いています。子供のスクロールビューにはビューがたくさんあるので(子供ビューはスクロールビューのすべての描画スペースを使用しています)それは完全に機能させるために、私はまた、子供のスクロールビュー内のすべての子ビューのタッチに親スクロール用タッチ要求を拒否しなければならなかった:

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
    } 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // Disallow the touch request for parent scroll on touch of 
     // child view 
     v.getParent().requestDisallowInterceptTouchEvent(true); 
     return false; 
    } 
});` 
childScrollviewRecursiveLoopChildren(parentScrollView, childScrollView); 
public void childScrollviewRecursiveLoopChildren(final ScrollView parentScrollView, View parent) { 
    for (int i = ((ViewGroup) parent).getChildCount() - 1; i >= 0; i--) { 
     final View child = ((ViewGroup) parent).getChildAt(i); 
     if (child instanceof ViewGroup) { 
      childScrollviewRecursiveLoopChildren(parentScrollView, (ViewGroup) child); 
     } else { 
      child.setOnTouchListener(new View.OnTouchListener() { 
       public boolean onTouch(View v, MotionEvent event) 
       { 
        // Disallow the touch request for parent scroll on touch of 
        // child view 
        parentScrollView.requestDisallowInterceptTouchEvent(true); 
        return false; 
       } 
      }); 
     } 
    } 
} 
関連する問題