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

回答編集履歴

2

質問に合わせて一部説明を変更

2021/11/05 11:47

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -60,5 +60,5 @@
60
60
  });
61
61
  ```
62
62
 
63
- なお、smoothScrollBy を使うにしてもその値を自動で求められないかとやっていた時に、なぜか width=150 にすると No.1 と No.8 が中央に出来ない(しようとするとNo.2/No7に戻される)事象が出ました。
63
+ なお、smoothScrollBy を使うにしてもその値を自動で求められないかとやっていた時に、なぜか width=150 にすると No.1 と No.7 が中央に出来ない(しようとするとNo.2/No6に戻される)事象が出ました。
64
64
  タッチ操作でも同様でしたのでボタン等の問題では無く LinearLayoutManager もしくは ItemDecoration 関係のようですが、今のところ問題点の想像もついていません。

1

smoothScrollBy 版追加

2021/11/05 11:47

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -30,4 +30,35 @@
30
30
  }
31
31
  });
32
32
  ```
33
- としてみてください。
33
+ としてみてください。
34
+
35
+ ----
36
+
37
+ MainActivity に以下のメソッドを追加し
38
+ ```java
39
+ private int calcPixelFromDp(int dp){
40
+ DisplayMetrics metrics = getResources().getDisplayMetrics();
41
+ return (int)(dp * metrics.density);
42
+ }
43
+ ```
44
+ 各ボタンは以下のようにすると一応動作しました。
45
+ -200,200 のところは、それぞれ recycler_view のトップコンテナの width の値(450?)から負数(-450),正数(450)としてください。
46
+ こちらでは 200 でテストしたのでこの値となっています。
47
+ ```java
48
+ left_button.setOnClickListener(new View.OnClickListener() {
49
+ @Override
50
+ public void onClick(View view) {
51
+ recyclerView.smoothScrollBy(calcPixelFromDp(-200), 0);
52
+ }
53
+ });
54
+
55
+ right_button.setOnClickListener(new View.OnClickListener() {
56
+ @Override
57
+ public void onClick(View view) {
58
+ recyclerView.smoothScrollBy(calcPixelFromDp(200), 0);
59
+ }
60
+ });
61
+ ```
62
+
63
+ なお、smoothScrollBy を使うにしてもその値を自動で求められないかとやっていた時に、なぜか width=150 にすると No.1 と No.8 が中央に出来ない(しようとするとNo.2/No7に戻される)事象が出ました。
64
+ タッチ操作でも同様でしたのでボタン等の問題では無く LinearLayoutManager もしくは ItemDecoration 関係のようですが、今のところ問題点の想像もついていません。