質問編集履歴

1

コードの変更,実現したいことを明確にした

2021/09/15 03:42

投稿

Jhon_McClane
Jhon_McClane

スコア48

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
- Markerを配置すると再描画に時間が掛かってしまい,検出しているのかなと考えています.
29
+
12
-
13
- また,marker数が増えてくると,地図がカクカクになる印象を受けます.
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
- //when map is ready
113
+ // onMapReadyが呼ばれたとき,1度だけ実行
106
-
107
- mapUpdate = new MapUpdate(googleMap, groupInfo, _handler);
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
- private void setPinOnMap(UserInfo userInfo) {
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 location = new LatLng(userInfo.getLatitude(), userInfo.getLongitude());
145
+ LatLng currentLocation = new LatLng(userInfo.getLatitude(), userInfo.getLongitude());
134
-
146
+
147
+
148
+
135
- Marker marker = map.addMarker(new MarkerOptions()
149
+ marker = mMap.addMarker(new MarkerOptions()
136
-
150
+
137
- .position(location)
151
+ .position(currentLocation)
138
152
 
139
153
  .title(userInfo.getPeerId()));
140
154
 
141
155
 
142
156
 
143
- // 自端末のPinは赤色
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
- myMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_pin));
169
+ marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_pin));
150
-
170
+
151
- map.animateCamera(CameraUpdateFactory.newLatLngZoom(location, 18));
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
+ ```