質問編集履歴
1
コードの変更,実現したいことを明確にした
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,21 +2,35 @@
|
|
2
2
|
|
3
3
|
Android studio 4.2.2でgoogle Mapを取り入れた実装をしています.
|
4
4
|
|
5
|
+
私が実装したい機能として,ユーザの向きを取得する度に,マップ UI上で向きが分かるよう反映させたいです.
|
6
|
+
|
7
|
+
しかし,向きを取得する毎にsetOrientation()を呼ぶため,膨大な数の
|
8
|
+
|
9
|
+
```ここに言語を入力
|
10
|
+
|
11
|
+
I/Counters: exceeded sample count in FrameTime
|
12
|
+
|
13
|
+
```
|
14
|
+
|
15
|
+
が呼ばれます. いずれ,処理が重いと判断され,アプリが落ちることはあるでしょうか.
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
向きは,onSensorChanged(SensorEvent event) で内の処理で取得しています.
|
20
|
+
|
21
|
+
|
22
|
+
|
5
23
|
以下のLogは,地図の状態が変わる度に呼ばれるのですが,何故こんなに呼ばれるのでしょうか.
|
6
24
|
|
7
|
-
そもそもFrameTime以内に,カメラ位置・拡大縮小による描画を終えることは可能なのでしょうか.
|
25
|
+
そもそもFrameTime以内に,カメラ位置・拡大縮小・markerの変更による描画を終えることは可能なのでしょうか.
|
8
26
|
|
9
27
|
私の原因は,FrameTimeでのsample数を越えたことが原因です.
|
10
28
|
|
11
|
-
|
29
|
+
|
12
|
-
|
13
|
-
|
30
|
+
|
14
|
-
|
15
|
-
markerを利用した場合でも,このLogは検出しないようにすべきなのでしょうか.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
一様このLogは無視して構わないという情報を見たのですが,で
|
31
|
+
一様このLogは無視して構わないという情報を見たのですが,スレッドの表示限界に達することでアプリが落ちる様な気がするので,
|
32
|
+
|
33
|
+
できれば検出されないようにしたいです.
|
20
34
|
|
21
35
|
|
22
36
|
|
@@ -26,9 +40,7 @@
|
|
26
40
|
|
27
41
|
### 大量にはかれるLog
|
28
42
|
|
29
|
-
以下のように,zoomIn/Out, カメラ位置を動かすなどをすると,大量に検出します.
|
43
|
+
以下のように,zoomIn/Out, カメラ位置を動かす,Markerの状態が変わるなどをすると,大量に検出します.
|
30
|
-
|
31
|
-
例:0.3秒ほどの地図縮小操作でCounterが100件くらい出ます.
|
32
44
|
|
33
45
|
```
|
34
46
|
|
@@ -98,57 +110,65 @@
|
|
98
110
|
|
99
111
|
```ここに言語名を入力
|
100
112
|
|
101
|
-
@Override
|
102
|
-
|
103
|
-
public void onMapReady(GoogleMap googleMap) {
|
104
|
-
|
105
|
-
|
113
|
+
// onMapReadyが呼ばれたとき,1度だけ実行
|
106
|
-
|
107
|
-
|
114
|
+
|
108
|
-
|
109
|
-
mapUpdate.onMapStart();
|
110
|
-
|
111
|
-
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
public void onMapStart() {
|
115
|
+
public void onMapStart() {
|
116
116
|
|
117
117
|
// marker my location in map
|
118
118
|
|
119
|
-
setPinOnMap(myUserInfo);
|
119
|
+
//setPinOnMap(myUserInfo);
|
120
|
+
|
121
|
+
onLocationChanged(myUserInfo);
|
120
122
|
|
121
123
|
// marker group area in map
|
122
124
|
|
123
125
|
createCircle();
|
124
126
|
|
125
|
-
map.getUiSettings().setScrollGesturesEnabled(false);
|
127
|
+
mMap.getUiSettings().setScrollGesturesEnabled(false);
|
126
|
-
|
128
|
+
|
127
|
-
}
|
129
|
+
}
|
128
|
-
|
129
|
-
|
130
|
-
|
130
|
+
|
131
|
+
|
132
|
+
|
131
|
-
p
|
133
|
+
public void onLocationChanged(UserInfo userInfo) {
|
134
|
+
|
132
|
-
|
135
|
+
Marker marker = markerHashMap.get(userInfo.getPeerId());
|
136
|
+
|
137
|
+
if (null != marker) {
|
138
|
+
|
139
|
+
marker.remove();
|
140
|
+
|
141
|
+
Log.d("onLocationChanged()", userInfo.getPeerId() + "さんのMarkerをremove()します");
|
142
|
+
|
143
|
+
}
|
144
|
+
|
133
|
-
LatLng
|
145
|
+
LatLng currentLocation = new LatLng(userInfo.getLatitude(), userInfo.getLongitude());
|
134
|
-
|
146
|
+
|
147
|
+
|
148
|
+
|
135
|
-
|
149
|
+
marker = mMap.addMarker(new MarkerOptions()
|
136
|
-
|
150
|
+
|
137
|
-
.position(
|
151
|
+
.position(currentLocation)
|
138
152
|
|
139
153
|
.title(userInfo.getPeerId()));
|
140
154
|
|
141
155
|
|
142
156
|
|
143
|
-
|
157
|
+
markerHashMap.put(userInfo.getPeerId(), marker);
|
158
|
+
|
159
|
+
Log.d("onLocationChanged()", userInfo.getPeerId() + "さんのMarkerを更新しました");
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
Log.d("onLocationChanged()", "markerの数は" + markerHashMap.size() + "です");
|
164
|
+
|
165
|
+
|
144
166
|
|
145
167
|
if (userInfo.getPeerId().equals(myUserInfo.getPeerId())) {
|
146
168
|
|
147
|
-
myMarker = marker;
|
148
|
-
|
149
|
-
m
|
169
|
+
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_pin));
|
150
|
-
|
170
|
+
|
151
|
-
map.
|
171
|
+
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocation, 18));
|
152
172
|
|
153
173
|
}
|
154
174
|
|
@@ -166,6 +186,24 @@
|
|
166
186
|
|
167
187
|
}
|
168
188
|
|
189
|
+
}
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
// 視覚的方向変更
|
194
|
+
|
195
|
+
public void setOrientation(float dirAngle) {
|
196
|
+
|
197
|
+
Marker marker = markerHashMap.get(myUserInfo.getPeerId());
|
198
|
+
|
199
|
+
if (null != marker) {
|
200
|
+
|
201
|
+
marker.setRotation(dirAngle);
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
}
|
206
|
+
|
169
207
|
|
170
208
|
|
171
209
|
private void createCircle() {
|
@@ -182,10 +220,8 @@
|
|
182
220
|
|
183
221
|
.zIndex(1.0f);
|
184
222
|
|
185
|
-
map.addCircle(circleOptions);
|
223
|
+
mMap.addCircle(circleOptions);
|
186
|
-
|
224
|
+
|
187
|
-
}
|
225
|
+
}
|
188
|
-
|
189
|
-
|
226
|
+
|
190
|
-
|
191
|
-
```
|
227
|
+
```
|