回答編集履歴

2

指摘を受けて例示コードを改修

2018/04/19 13:04

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -137,3 +137,177 @@
137
137
 
138
138
 
139
139
  こんな感じでどうでしょうかね?テストしていない(できない)ので動く保証はできませんが・・・。
140
+
141
+
142
+
143
+ ---
144
+
145
+
146
+
147
+ (2017/04/19追記)
148
+
149
+ kakajikaさんのご指摘を受けて書き直したものです。前のものは残しておきます。
150
+
151
+
152
+
153
+ MainActivity.java
154
+
155
+ ```Java
156
+
157
+ // SimulationView.OnSimulationUpdateListenerを実装(implements)
158
+
159
+ public class MainActivity extends AppCompatActivity implements SimulationView.OnSimulationUpdateListener {
160
+
161
+
162
+
163
+ @Override
164
+
165
+ protected void onCreate(Bundle savedInstanceState) {
166
+
167
+ super.onCreate(savedInstanceState);
168
+
169
+ setContentView(R.layout.activity_main);
170
+
171
+
172
+
173
+ // Listenerをセットする
174
+
175
+ SimulationView simview = findViewById(R.id.canvas);
176
+
177
+ simview.setOnSimulationUpdateListener(this);
178
+
179
+
180
+
181
+ setBarText();
182
+
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+ //壁に当たった時に呼ばれる
190
+
191
+ @Override
192
+
193
+ public void countUpBarText(int key) {//textviewを変更する
194
+
195
+ // この中は変更なし
196
+
197
+ }
198
+
199
+ }
200
+
201
+
202
+
203
+ ```
204
+
205
+ SimulationView.java
206
+
207
+ ```Java
208
+
209
+ public class SimulationView extends SurfaceView implements SurfaceHolder.Callback {
210
+
211
+
212
+
213
+ //private MainActivity main; // これはやめる
214
+
215
+ private OnSimulationUpdateListener mListener; // 追加
216
+
217
+
218
+
219
+ void setOnSimulationUpdateListener(OnSimulationUpdateListener listener) {
220
+
221
+ mListener = listener;
222
+
223
+ }
224
+
225
+
226
+
227
+ public void startnow() {
228
+
229
+ ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
230
+
231
+ executor.scheduleAtFixedRate(new Runnable() {
232
+
233
+ @Override
234
+
235
+ public void run() {
236
+
237
+ post(ball); // post()に変更
238
+
239
+ Log.d("test", "ループ");
240
+
241
+ draw();
242
+
243
+ }
244
+
245
+ }, 100, 100, TimeUnit.MICROSECONDS);
246
+
247
+ }
248
+
249
+
250
+
251
+ class Ball implements Runnable {
252
+
253
+
254
+
255
+ // run()の中でupdate()を呼ぶ
256
+
257
+ @Override
258
+
259
+ public void run() {
260
+
261
+ update();
262
+
263
+ }
264
+
265
+
266
+
267
+ void update() {
268
+
269
+ //右壁
270
+
271
+ if (x < 0) {
272
+
273
+ checkBar = 1;
274
+
275
+ mListener.countUpBarText(checkBar); // mListenerを参照
276
+
277
+ dx = -dx;
278
+
279
+ }
280
+
281
+
282
+
283
+ // 以降、同様にmainをmListenerに置き換える
284
+
285
+
286
+
287
+ }
288
+
289
+ }
290
+
291
+
292
+
293
+ interface OnSimulationUpdateListener {
294
+
295
+ void countUpBarText(int key);
296
+
297
+ }
298
+
299
+ }
300
+
301
+ ```
302
+
303
+
304
+
305
+ interfaceの解説をするのはちょっと辛いので、書籍やネットの資料を参考にしてください。やっていることの趣旨としては、前とさほど違いはありません。
306
+
307
+
308
+
309
+ > kakajikaさん
310
+
311
+
312
+
313
+ こんなところでどうでしょうか・・・。(あまり自信ない)

1

余談を書こうとしたので見出しをつけたけど、やめたのでいらなかった・・・

2018/04/19 13:04

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -1,5 +1,3 @@
1
- #### 本題
2
-
3
1
  ざっとですが、こうしたらどうかという案を考えてみました。まずコードです。変更点とその周辺のみを記述しています。
4
2
 
5
3