質問編集履歴

5

判明した点について追記いたしました

2020/01/24 08:04

投稿

takusuke
takusuke

スコア16

test CHANGED
File without changes
test CHANGED
@@ -398,4 +398,24 @@
398
398
 
399
399
 
400
400
 
401
+ <2020/01/24追記>
402
+
403
+ 皆様のご回答を元にLogを辿ったり色々試してみた結果、以下のことが判明いたしました。
404
+
405
+
406
+
407
+ ・ドラッグ後の座標取得自体はうまくいっている
408
+
409
+ ・OnCreate()でsetX()を使用しているが, この関数はxmlで指定した位置からの座標移動であるため座標がずれてしまう
410
+
411
+ ・実現するには, setX()を使用する前にViewを画面上の(0, 0)座標に初期化しなければいけない
412
+
413
+
414
+
415
+ 画面上の(0, 0)座標にViewを指定するやり方がわからず困っています。。。
416
+
417
+ XMLはいじらずに実装したいと考えています。
418
+
419
+
420
+
401
421
  ![Android Studio におけるデバッグ時の画面](3ded3807cdb239558e1576e7c93e461b.png)

4

改変したコードの追記

2020/01/24 08:04

投稿

takusuke
takusuke

スコア16

test CHANGED
File without changes
test CHANGED
@@ -214,4 +214,188 @@
214
214
 
215
215
 
216
216
 
217
+ <改変後のコードの追記>
218
+
219
+
220
+
221
+ ```java
222
+
223
+ textView[0].setOnTouchListener(new View.OnTouchListener() {
224
+
225
+ @Override
226
+
227
+ public boolean onTouch(View v, MotionEvent event) {
228
+
229
+ // x,y 位置取得
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+ int newbuttonX = (int)event.getRawX();
238
+
239
+ int newbuttonY = (int)event.getRawY();
240
+
241
+
242
+
243
+
244
+
245
+ switch (event.getAction()) {
246
+
247
+ // タッチダウンでdragされた
248
+
249
+ case MotionEvent.ACTION_MOVE:
250
+
251
+ // ACTION_MOVEでの位置
252
+
253
+ // performCheckを入れろと警告が出るので
254
+
255
+ //v.performClick();
256
+
257
+
258
+
259
+ x = (newbuttonX - buttonX);
260
+
261
+ y = (newbuttonY - buttonY);
262
+
263
+
264
+
265
+
266
+
267
+ dx = textView[0].getLeft() + x;
268
+
269
+ dy = textView[0].getTop() + y;
270
+
271
+
272
+
273
+ imgW = dx + textView[0].getWidth();
274
+
275
+ imgH = dy + textView[0].getHeight();
276
+
277
+
278
+
279
+ //ボタンの定義
280
+
281
+ button_dx = button[0].getLeft() + x;
282
+
283
+ button_dy = button[0].getTop() + y;
284
+
285
+ buttonW = button_dx + button[0].getWidth();
286
+
287
+ buttonH = button_dy + button[0].getHeight();
288
+
289
+
290
+
291
+ //単位の定義
292
+
293
+ unit_dx = unit[0].getLeft() + x;
294
+
295
+ unit_dy = unit[0].getTop() + y;
296
+
297
+ unitW = unit_dx + unit[0].getWidth();
298
+
299
+ unitH = unit_dy + unit[0].getHeight();
300
+
301
+
302
+
303
+ //非表示ボタンの定義
304
+
305
+ dbutton_dx = syoukyo[0].getLeft() + x;
306
+
307
+ dbutton_dy = syoukyo[0].getTop() + y;
308
+
309
+ dbuttonW = dbutton_dx + syoukyo[0].getWidth();
310
+
311
+ dbuttonH = dbutton_dy + syoukyo[0].getHeight();
312
+
313
+
314
+
315
+ // Viewの位置を設定する
316
+
317
+ textView[0].layout(dx, dy, imgW, imgH);
318
+
319
+ button[0].layout(button_dx, button_dy, buttonW, buttonH);
320
+
321
+ unit[0].layout(unit_dx, unit_dy, unitW, unitH);
322
+
323
+ syoukyo[0].layout(dbutton_dx, dbutton_dy, dbuttonW, dbuttonH);
324
+
325
+
326
+
327
+ //String str = "dx="+dx+"\ndy="+dy;
328
+
329
+ //textViewXY.setText(""+read_x+"");
330
+
331
+ //Log.d("onTouch","ACTION_MOVE: dx="+dx+", dy="+dy);
332
+
333
+ break;
334
+
335
+ case MotionEvent.ACTION_DOWN:
336
+
337
+ break;
338
+
339
+ case MotionEvent.ACTION_UP:
340
+
341
+ break;
342
+
343
+ default:
344
+
345
+ break;
346
+
347
+ }
348
+
349
+
350
+
351
+ editor = prefs.edit();
352
+
353
+ editor.putFloat("oldx1", textView[0].getX()-v.getLeft());
354
+
355
+ editor.apply();
356
+
357
+
358
+
359
+ read_oldx[0] = prefs.getFloat("oldx1", 0);
360
+
361
+
362
+
363
+ editor = prefs.edit();
364
+
365
+ editor.putFloat("oldy1", textView[0].getY()-v.getTop());
366
+
367
+ editor.apply();
368
+
369
+
370
+
371
+ read_oldy[0] = prefs.getFloat("oldy1", 0);
372
+
373
+
374
+
375
+
376
+
377
+ // タッチした位置を古い位置とする
378
+
379
+ buttonX = newbuttonX;
380
+
381
+ buttonY = newbuttonY;
382
+
383
+
384
+
385
+
386
+
387
+ return true;
388
+
389
+ }
390
+
391
+ });
392
+
393
+ ```
394
+
395
+
396
+
397
+ これで実行しますと、ドラッグ自体はうまく動作するのですが、ドラッグ前の位置が保存されドラッグ後の位置保存がうまくいきません。
398
+
399
+
400
+
217
401
  ![Android Studio におけるデバッグ時の画面](3ded3807cdb239558e1576e7c93e461b.png)

3

詳細のコードを追記しました

2020/01/20 07:45

投稿

takusuke
takusuke

スコア16

test CHANGED
File without changes
test CHANGED
@@ -20,4 +20,198 @@
20
20
 
21
21
 
22
22
 
23
+ <詳細コードの追記>
24
+
25
+ ```java
26
+
27
+ textView[0].setOnTouchListener(new View.OnTouchListener() {
28
+
29
+ @Override
30
+
31
+ public boolean onTouch(View v, MotionEvent event) {
32
+
33
+ // x,y 位置取得
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+ int newbuttonX = (int)event.getRawX();
42
+
43
+ int newbuttonY = (int)event.getRawY();
44
+
45
+
46
+
47
+
48
+
49
+ switch (event.getAction()) {
50
+
51
+ // タッチダウンでdragされた
52
+
53
+ case MotionEvent.ACTION_MOVE:
54
+
55
+ // ACTION_MOVEでの位置
56
+
57
+ // performCheckを入れろと警告が出るので
58
+
59
+ v.performClick();
60
+
61
+
62
+
63
+ x = (newbuttonX - buttonX);
64
+
65
+ y = (newbuttonY - buttonY);
66
+
67
+
68
+
69
+
70
+
71
+ dx = cImageView[0].getLeft() + x;
72
+
73
+ dy = cImageView[0].getTop() + y;
74
+
75
+
76
+
77
+ imgW = dx + cImageView[0].getWidth();
78
+
79
+ imgH = dy + cImageView[0].getHeight();
80
+
81
+
82
+
83
+ //ボタンの定義
84
+
85
+ button_dx = button[0].getLeft() + x;
86
+
87
+ button_dy = button[0].getTop() + y;
88
+
89
+ buttonW = button_dx + button[0].getWidth();
90
+
91
+ buttonH = button_dy + button[0].getHeight();
92
+
93
+
94
+
95
+ //単位の定義
96
+
97
+ unit_dx = unit[0].getLeft() + x;
98
+
99
+ unit_dy = unit[0].getTop() + y;
100
+
101
+ unitW = unit_dx + unit[0].getWidth();
102
+
103
+ unitH = unit_dy + unit[0].getHeight();
104
+
105
+
106
+
107
+ //非表示ボタンの定義
108
+
109
+ dbutton_dx = syoukyo[0].getLeft() + x;
110
+
111
+ dbutton_dy = syoukyo[0].getTop() + y;
112
+
113
+ dbuttonW = dbutton_dx + syoukyo[0].getWidth();
114
+
115
+ dbuttonH = dbutton_dy + syoukyo[0].getHeight();
116
+
117
+
118
+
119
+ // Viewの位置を設定する
120
+
121
+ cImageView[0].layout(dx, dy, imgW, imgH);
122
+
123
+ button[0].layout(button_dx, button_dy, buttonW, buttonH);
124
+
125
+ unit[0].layout(unit_dx, unit_dy, unitW, unitH);
126
+
127
+ syoukyo[0].layout(dbutton_dx, dbutton_dy, dbuttonW, dbuttonH);
128
+
129
+
130
+
131
+ //String str = "dx="+dx+"\ndy="+dy;
132
+
133
+ //textViewXY.setText(""+read_x+"");
134
+
135
+ //Log.d("onTouch","ACTION_MOVE: dx="+dx+", dy="+dy);
136
+
137
+ break;
138
+
139
+ case MotionEvent.ACTION_DOWN:
140
+
141
+ break;
142
+
143
+ case MotionEvent.ACTION_UP:
144
+
145
+ break;
146
+
147
+ default:
148
+
149
+ break;
150
+
151
+ }
152
+
153
+
154
+
155
+ editor = prefs.edit();
156
+
157
+ //このcImageView[0].getX()で毎回値が'42'足されてしまう
158
+
159
+ //どうにかして'42'を参照し、引き算できたらと考えている。
160
+
161
+ editor.putFloat("oldx1", cImageView[0].getX());
162
+
163
+ editor.apply();
164
+
165
+
166
+
167
+ read_oldx[0] = prefs.getFloat("oldx1", 0);
168
+
169
+
170
+
171
+ editor = prefs.edit();
172
+
173
+ //ここでは21値が毎回ズレてしまうので無理やり21で引き算をしている
174
+
175
+ //端末によってこの値は変わってしまうため、どの端末でも動作できるように実装したい・・・。
176
+
177
+ editor.putFloat("oldy1", cImageView[0].getY()-21);
178
+
179
+ editor.apply();
180
+
181
+
182
+
183
+ read_oldy[0] = prefs.getFloat("oldy1", 0);
184
+
185
+
186
+
187
+
188
+
189
+ // タッチした位置を古い位置とする
190
+
191
+ buttonX = newbuttonX;
192
+
193
+ buttonY = newbuttonY;
194
+
195
+
196
+
197
+
198
+
199
+ return true;
200
+
201
+ }
202
+
203
+ });
204
+
205
+ ```
206
+
207
+
208
+
209
+ 私が実装しようとしている機能は、Viewをドラッグし、その位置をprefsで保存し、画面遷移した後、Viewのある画面に戻ってきても位置が保持されている機能です。
210
+
211
+ しかし、このコードであると遷移後戻ってきた際に少しだけ値がずれてしまっています。
212
+
213
+ そもそも何故値が足されていくのでしょうか・・・。
214
+
215
+
216
+
23
217
  ![Android Studio におけるデバッグ時の画面](3ded3807cdb239558e1576e7c93e461b.png)

2

初心者アイコンをつけ、題名を少し変えました

2020/01/20 03:08

投稿

takusuke
takusuke

スコア16

test CHANGED
@@ -1 +1 @@
1
- [初心者]Android Studio において, デバッグに記載してある内容が分かりません
1
+ Android Studio において, デバッグに記載してある内容を参照する方法が分かりません
test CHANGED
File without changes

1

Variablesについてより詳しく追記いたしました。

2020/01/17 11:56

投稿

takusuke
takusuke

スコア16

test CHANGED
File without changes
test CHANGED
@@ -14,4 +14,10 @@
14
14
 
15
15
 
16
16
 
17
+ <以下追記>
18
+
19
+ Variablesにある「View.mLeft」は「View.java」という場所にあり、それの参照方法が分かりません。。。
20
+
21
+
22
+
17
23
  ![Android Studio におけるデバッグ時の画面](3ded3807cdb239558e1576e7c93e461b.png)