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

質問編集履歴

1

その後の検証結果を追記します。

2021/06/09 16:29

投稿

yorozuya
yorozuya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -65,7 +65,106 @@
65
65
 
66
66
  ・端末は複数台試してみました。全て再現されます。
67
67
 
68
+
68
69
  ### 補足情報(FW/ツールのバージョンなど)
69
70
 
70
71
  ・AndroidStudio 4.2.1
71
- ・CompileSdkVersion 30(API30:Android11.0)
72
+ ・CompileSdkVersion 30(API30:Android11.0)
73
+
74
+
75
+ ==追記 6/10
76
+
77
+ 追記です。
78
+ その後も検証行いましたが、
79
+
80
+ ・pointerIDと
81
+ 途中にあがるPOINTER DOWN/UPで別のタッチを判定できると思っておりましたが、
82
+ 初回指タッチ中(pointerId :0)にも関わらず掌底タッチでpointerId が0であがってくる、また途中POINTER
83
+ POINTERDOWN/UPも上がってこないタイミングも確認できました。
84
+
85
+ 解決済みとしましたが一応追加で判明しましたので追記させていただきます。
86
+
87
+ 手順は同じですが
88
+ 1.左手の親指でボタンを押したままにする。
89
+ 2.右手でボタン外の空きスペースに掌底風にタッチし離す。
90
+ 3.左手の親指を離す
91
+ です。
92
+
93
+
94
+ イベントの順序としては、
95
+ 1.D/onTouch: ACTION DOWN  // 初回のタッチです。勿論IDは0です。
96
+ 2.D/onTouch: ACTION UP   // 掌底タッチです。IDは0であがってきました。
97
+ 3.D/onTouch: ACTION DOWN // おそらく掌底タッチのダウンでしょうか。IDは0であがってます。
98
+ 4.D/onTouch: MOVE // 初回タッチのMOVEです。
99
+ 5.D/onTouch: ACTION UP // 初回タッチを離しました。IDはもちろん0です。
100
+
101
+
102
+ 手順の2のタッチが
103
+ PointerIDで判断できる場合もあれば、
104
+ 同じIDの場合もあり、
105
+ またPOINTERDOWN/UPであがる場合もある
106
+ という結果です。
107
+ となるため差異がなく判断要素がもうないのではという状況になっています。
108
+
109
+ 何が原因なのかスッキリしたいため
110
+ 引き続き確認してみます。
111
+
112
+ ### 確認用のソースコード
113
+
114
+ ```Java
115
+
116
+ boolean fInterruptEvent = false; // メンバで宣言
117
+ ~~~
118
+
119
+ btn.setBackgroundColor(Color.rgb(0,255,0));
120
+ btn.setOnTouchListener(new View.OnTouchListener() {
121
+ @Override
122
+ public boolean onTouch(View v, MotionEvent event) {
123
+
124
+ int eventAction = event.getActionMasked();
125
+ int pointerIndex = event.getActionIndex();
126
+ int pointerId = event.getPointerId(pointerIndex);
127
+ int pointerCount = event.getPointerCount();
128
+
129
+ if( eventAction == MotionEvent.ACTION_DOWN )
130
+ {
131
+ btn.setText("PUSH");
132
+ Log.d("onTouch","ACTION DOWN");
133
+ }
134
+ else if( eventAction == MotionEvent.ACTION_UP )
135
+ {
136
+ btn.setText("RELEASE!!!!");
137
+ if( pointerId > 0 || fInterruptEvent )
138
+ {
139
+ // 初回タッチ以外のUPと判断?
140
+ btn.setBackgroundColor(Color.rgb(255,0,0));
141
+ Log.d("onTouch","INTERRUPT ACTION UP");
142
+ fInterruptEvent = false;
143
+ }
144
+ else
145
+ {
146
+ btn.setBackgroundColor(Color.rgb(0,255,0));
147
+ Log.d("onTouch","ACTION UP");
148
+ }
149
+
150
+ }
151
+ else if( eventAction == MotionEvent.ACTION_POINTER_DOWN )
152
+ {
153
+ Log.d("onTouch","POINTER DOWN");
154
+ fInterruptEvent = true;
155
+ }
156
+ else if( eventAction == MotionEvent.ACTION_POINTER_UP )
157
+ {
158
+ Log.d("onTouch","POINTER UP");
159
+ fInterruptEvent = true;
160
+ }
161
+ else if( eventAction == MotionEvent.ACTION_MOVE )
162
+ {
163
+ Log.d("onTouch","MOVE");
164
+ }
165
+
166
+ return false;
167
+ }
168
+ });
169
+
170
+ ```