質問編集履歴
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
|
+
```
|