teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

GridViewのスクロールについて追記

2019/12/19 13:15

投稿

kakajika
kakajika

スコア3133

answer CHANGED
@@ -9,8 +9,6 @@
9
9
  }
10
10
  ```
11
11
 
12
- ---
13
-
14
12
  ViewGroupを継承したクラスを用意したくない場合は、[CoordinatorLayout.Behavior](https://developer.android.com/reference/androidx/coordinatorlayout/widget/CoordinatorLayout.Behavior)を使うという方法もあります。CoordinatorLayoutでViewGroupを囲んで、ViewGroupにはonInterceptTouchEventを実装したCoordinatorLayout.Behaviorを設定すればOKです。
15
13
 
16
14
  ```java
@@ -22,4 +20,17 @@
22
20
  return super.onInterceptTouchEvent(parent, child, ev);
23
21
  }
24
22
  });
23
+ ```
24
+
25
+ ---
26
+
27
+ **追記**
28
+
29
+ GridViewはスクロールのジェスチャーを検出すると、親ViewGroupのonInterceptTouchEventを呼ばれなくするメソッド([requestDisallowInterceptTouchEvent](https://developer.android.com/reference/android/view/ViewParent.html#requestDisallowInterceptTouchEvent(boolean)))を呼んでしまいます。これを回避するにはGridViewのスクロール処理が発生しないようにする必要がありますが、それ用のAPIは用意されていないようなので以下のようにACTION_MOVEのタッチイベントを奪うことで対応できます。
30
+
31
+ ```java
32
+ // ACTION_MOVEのタッチイベントをGridViewに渡さないようにする
33
+ gridView.setOnTouchListener((v, event) ->
34
+ event.getAction() == MotionEvent.ACTION_MOVE
35
+ );
25
36
  ```