(ええ~そんなこと言われても・・・)ちょっと調べてみます。(その前にその仕様でいいんですか?)
やり方
ListViewにセットするAdapterのgetViewを拡張します。
条件として、ScrollViewのlayout_heightはwrap_contentとかではなくて固定値にする必要があります。
HogeAdapter.java
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 省略
// ScrollViewクラスのscrollViewローカル変数 が参照できる状態とします。
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
ScrollView sv = (ScrollView)v;
if(sv.getChildAt(0).getHeight() > sv.getHeight()){
sv.requestDisallowInterceptTouchEvent(true);
}
}
return v.onTouchEvent(event);
}
});
// 省略
return convertView;
}
解説
この一行で、親に対してインターセプトやめてくれって出せます。
sv.requestDisallowInterceptTouchEvent(true);
通常はListViewがスクロールします。
ScrollViewに対してタッチダウンが発生した時にスクロールが可能な(ScrollViewの高さより子の高さが大きい)場合は、requestDisallowInterceptTouchEventを呼び出し、ScrollViewがスクロールするようにしています。
ひとこと
本当はAdapter#getView内でsetOnXXListenerは書きたくないでござる。