この問題を解決しようとしています: pullToRefreshScrollViewがタッチをリッスンしないようにする方法 カスタマイズ可能なクラスを作成せずにScrollViewがonTouchEventsを処理するのをブロックする解決策があるのだろうか?なぜすべての方法が好きなのか
gridView.getParent().requestDisallowInterceptTouchEvent(true);
mScrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
動作しませんか?それらの問題は何ですか?なぜGoogleは機能しないメソッドを実装するのですか?
// ScrollViewを取得します
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);
//何もしないようにOnTouchListenerを設定して、スクロールを無効にします
myScroll.setOnTouchListener( new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
// OnTouchListnerを削除して、スクロールを有効にします
tvDisplayScroll.setOnTouchListener(null);
カスタムScrollViewを作成し、好きな場所で使用できます。
class CustomScrollView extends ScrollView {
// true if we can scroll the ScrollView
// false if we cannot scroll
private boolean scrollable = true;
public void setScrollingEnabled(boolean scrollable) {
this.scrollable = scrollable;
}
public boolean isScrollable() {
return scrollable;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (scrollable) return super.onTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return scrollable; // scrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
if (!scrollable) return false;
else return super.onInterceptTouchEvent(ev);
}
}
これはレイアウトで使用できます
<com.packagename.CustomScrollView
Android:id="@+id/scrollView"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
</com.packagename.CustomScrollView >
次に呼び出します
((CustomScrollView )findViewById(R.id.scrollView)).setIsScrollable(false);
試してみてください:
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return isBlockedScrollView;
}
});