素直に配置するとタッチイベントが競合して、NumberPickerが動作してくれないです。
なので、NumberPickerでタッチイベントを検出したら親View(ここではScrollView)へのイベント伝搬を無効にするとよさそうです。
…みたいなことが、スタックオーバーフローかどこかに書いてたのだけど場所忘れちゃったのでメモ。
NumberPickerを継承した独自のViewをつくります
ScrollableNumberPicker.java
public class ScrollableNumberPicker extends NumberPicker {
public ScrollableNumberPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setOnTouchListener(new View.OnTouchListener(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
view.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
}
}
こんな感じ。
requestDisallowInterceptTouchEvent
ありがてぇ。