質問編集履歴

1

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

2021/06/09 16:29

投稿

yorozuya
yorozuya

スコア1

test CHANGED
File without changes
test CHANGED
@@ -132,6 +132,8 @@
132
132
 
133
133
 
134
134
 
135
+
136
+
135
137
  ### 補足情報(FW/ツールのバージョンなど)
136
138
 
137
139
 
@@ -139,3 +141,199 @@
139
141
  ・AndroidStudio 4.2.1
140
142
 
141
143
  ・CompileSdkVersion 30(API30:Android11.0)
144
+
145
+
146
+
147
+
148
+
149
+ ==追記 6/10
150
+
151
+
152
+
153
+ 追記です。
154
+
155
+ その後も検証行いましたが、
156
+
157
+
158
+
159
+ ・pointerIDと
160
+
161
+ 途中にあがるPOINTER DOWN/UPで別のタッチを判定できると思っておりましたが、
162
+
163
+ 初回指タッチ中(pointerId :0)にも関わらず掌底タッチでpointerId が0であがってくる、また途中POINTER
164
+
165
+ POINTERDOWN/UPも上がってこないタイミングも確認できました。
166
+
167
+
168
+
169
+ 解決済みとしましたが一応追加で判明しましたので追記させていただきます。
170
+
171
+
172
+
173
+ 手順は同じですが
174
+
175
+ 1.左手の親指でボタンを押したままにする。
176
+
177
+ 2.右手でボタン外の空きスペースに掌底風にタッチし離す。
178
+
179
+ 3.左手の親指を離す
180
+
181
+ です。
182
+
183
+
184
+
185
+
186
+
187
+ イベントの順序としては、
188
+
189
+ 1.D/onTouch: ACTION DOWN  // 初回のタッチです。勿論IDは0です。
190
+
191
+ 2.D/onTouch: ACTION UP   // 掌底タッチです。IDは0であがってきました。
192
+
193
+ 3.D/onTouch: ACTION DOWN // おそらく掌底タッチのダウンでしょうか。IDは0であがってます。
194
+
195
+ 4.D/onTouch: MOVE // 初回タッチのMOVEです。
196
+
197
+ 5.D/onTouch: ACTION UP // 初回タッチを離しました。IDはもちろん0です。
198
+
199
+
200
+
201
+
202
+
203
+ 手順の2のタッチが
204
+
205
+ PointerIDで判断できる場合もあれば、
206
+
207
+ 同じIDの場合もあり、
208
+
209
+ またPOINTERDOWN/UPであがる場合もある
210
+
211
+ という結果です。
212
+
213
+ となるため差異がなく判断要素がもうないのではという状況になっています。
214
+
215
+
216
+
217
+ 何が原因なのかスッキリしたいため
218
+
219
+ 引き続き確認してみます。
220
+
221
+
222
+
223
+ ### 確認用のソースコード
224
+
225
+
226
+
227
+ ```Java
228
+
229
+
230
+
231
+ boolean fInterruptEvent = false; // メンバで宣言
232
+
233
+ ~~~
234
+
235
+
236
+
237
+ btn.setBackgroundColor(Color.rgb(0,255,0));
238
+
239
+ btn.setOnTouchListener(new View.OnTouchListener() {
240
+
241
+ @Override
242
+
243
+ public boolean onTouch(View v, MotionEvent event) {
244
+
245
+
246
+
247
+ int eventAction = event.getActionMasked();
248
+
249
+ int pointerIndex = event.getActionIndex();
250
+
251
+ int pointerId = event.getPointerId(pointerIndex);
252
+
253
+ int pointerCount = event.getPointerCount();
254
+
255
+
256
+
257
+ if( eventAction == MotionEvent.ACTION_DOWN )
258
+
259
+ {
260
+
261
+ btn.setText("PUSH");
262
+
263
+ Log.d("onTouch","ACTION DOWN");
264
+
265
+ }
266
+
267
+ else if( eventAction == MotionEvent.ACTION_UP )
268
+
269
+ {
270
+
271
+ btn.setText("RELEASE!!!!");
272
+
273
+ if( pointerId > 0 || fInterruptEvent )
274
+
275
+ {
276
+
277
+ // 初回タッチ以外のUPと判断?
278
+
279
+ btn.setBackgroundColor(Color.rgb(255,0,0));
280
+
281
+ Log.d("onTouch","INTERRUPT ACTION UP");
282
+
283
+ fInterruptEvent = false;
284
+
285
+ }
286
+
287
+ else
288
+
289
+ {
290
+
291
+ btn.setBackgroundColor(Color.rgb(0,255,0));
292
+
293
+ Log.d("onTouch","ACTION UP");
294
+
295
+ }
296
+
297
+
298
+
299
+ }
300
+
301
+ else if( eventAction == MotionEvent.ACTION_POINTER_DOWN )
302
+
303
+ {
304
+
305
+ Log.d("onTouch","POINTER DOWN");
306
+
307
+ fInterruptEvent = true;
308
+
309
+ }
310
+
311
+ else if( eventAction == MotionEvent.ACTION_POINTER_UP )
312
+
313
+ {
314
+
315
+ Log.d("onTouch","POINTER UP");
316
+
317
+ fInterruptEvent = true;
318
+
319
+ }
320
+
321
+ else if( eventAction == MotionEvent.ACTION_MOVE )
322
+
323
+ {
324
+
325
+ Log.d("onTouch","MOVE");
326
+
327
+ }
328
+
329
+
330
+
331
+ return false;
332
+
333
+ }
334
+
335
+ });
336
+
337
+
338
+
339
+ ```