質問編集履歴
2
更新
test
CHANGED
File without changes
|
test
CHANGED
@@ -439,3 +439,9 @@
|
|
439
439
|
動画を再生し終えた後、画面には動画の最後のコマが残ったままなのですがこれを消去して描画すればいいのでしょうか?またそのコマの表示を終わらせる関数があれば教えていただきたいです。
|
440
440
|
|
441
441
|
android開発は初心者なのでご教授ください
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
drawCanvasをonSensorChangedの中にplayvideoをonCreateの中に書くと動きました。ありがとうございます。
|
1
変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,6 +64,8 @@
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
+
int a;
|
68
|
+
|
67
69
|
|
68
70
|
|
69
71
|
SensorManager mSensorManager;
|
@@ -200,23 +202,13 @@
|
|
200
202
|
|
201
203
|
t = t / 1000.0f;
|
202
204
|
|
203
|
-
|
205
|
+
|
204
206
|
|
205
207
|
|
206
208
|
|
207
209
|
if (RADIUS < 119.9f) {
|
208
210
|
|
209
|
-
|
211
|
+
|
210
|
-
|
211
|
-
RADIUS = 0;
|
212
|
-
|
213
|
-
mBallX = mSurfaceWidth / 2;
|
214
|
-
|
215
|
-
mBallY = 0;
|
216
|
-
|
217
|
-
}
|
218
|
-
|
219
|
-
if(t1 > 1730){
|
220
212
|
|
221
213
|
RADIUS = RADIUS + (mTo - mFrom) * (float) 0.10;
|
222
214
|
|
@@ -224,204 +216,208 @@
|
|
224
216
|
|
225
217
|
mBallY = mBallY + (mTo - mFrom) * (float) 0.20;
|
226
218
|
|
219
|
+
|
220
|
+
|
227
|
-
|
221
|
+
}
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
float x1 = t * x / 2.0f;
|
226
|
+
|
227
|
+
float y1 = t * y / 2.0f;
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
double xd = 6.0 * x1;
|
232
|
+
|
233
|
+
double yd = 6.0 * y1;
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
float xf = (float) xd;//doubleからfloatの変換
|
238
|
+
|
239
|
+
float yf = (float) yd;//doubleからfloatの変換
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
mBallX = mBallX - xf * COEF;
|
244
|
+
|
245
|
+
mBallY = mBallY - yf * COEF;
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
mFrom = System.currentTimeMillis();//開始時間
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
}
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
}
|
258
|
+
|
259
|
+
private void restart(Context cnt, int period){//リセットする関数
|
260
|
+
|
261
|
+
Intent mainActivity = new Intent(cnt, MainActivity.class);
|
262
|
+
|
263
|
+
PendingIntent pendingIntent = PendingIntent.getActivity(cnt, 0, mainActivity, PendingIntent.FLAG_CANCEL_CURRENT);
|
264
|
+
|
265
|
+
AlarmManager alarmManager = (AlarmManager)cnt.getSystemService(Context.ALARM_SERVICE);
|
266
|
+
|
267
|
+
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + period, pendingIntent);
|
268
|
+
|
269
|
+
}
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
private void playvideo() {
|
274
|
+
|
275
|
+
VideoView v = (VideoView)findViewById(R.id.v);
|
276
|
+
|
277
|
+
// 動画の指定(mp4の読込み)
|
278
|
+
|
279
|
+
v.setVideoURI(Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.out));
|
280
|
+
|
281
|
+
// 再生スタート
|
282
|
+
|
283
|
+
v.start();
|
284
|
+
|
285
|
+
v.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
|
286
|
+
|
287
|
+
|
288
|
+
|
289
|
+
@Override
|
290
|
+
|
291
|
+
public void onCompletion(MediaPlayer mp) {
|
292
|
+
|
293
|
+
a = 1;
|
294
|
+
|
295
|
+
drawCanvas();
|
228
296
|
|
229
297
|
}
|
230
298
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
299
|
+
});
|
300
|
+
|
301
|
+
}
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
private void drawCanvas() {
|
308
|
+
|
309
|
+
if(a > 0){
|
310
|
+
|
311
|
+
Canvas c = mHolder.lockCanvas();//サーフェス内のピクセルの編集を開始します.lockで始まりunlockで終わり
|
312
|
+
|
313
|
+
c.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
|
314
|
+
|
315
|
+
Paint paint = new Paint();//既定の設定で新しいペイントを作成します
|
316
|
+
|
317
|
+
paint.setColor(Color.WHITE);//1個上のpaintをsetColorでimportのColorを使って白に変える
|
318
|
+
|
319
|
+
c.drawCircle(mBallX, mBallY, RADIUS, paint);//cというキャンバスにpaintを使って絵を描く
|
320
|
+
|
321
|
+
mHolder.unlockCanvasAndPost(c);//キャンバス解放
|
322
|
+
|
323
|
+
}
|
324
|
+
|
325
|
+
}
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
+
@Override
|
330
|
+
|
331
|
+
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
332
|
+
|
333
|
+
}
|
334
|
+
|
335
|
+
|
336
|
+
|
337
|
+
@Override
|
338
|
+
|
339
|
+
protected void onResume() {//Activityが表示された時
|
340
|
+
|
341
|
+
super.onResume();
|
342
|
+
|
343
|
+
mSensorManager.registerListener(this, mGSensor, SensorManager.SENSOR_DELAY_GAME);
|
344
|
+
|
345
|
+
}
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
@Override
|
350
|
+
|
351
|
+
protected void onPause() {
|
352
|
+
|
353
|
+
super.onPause();
|
354
|
+
|
355
|
+
mSensorManager.unregisterListener(this);
|
356
|
+
|
357
|
+
}
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
@Override
|
364
|
+
|
365
|
+
public void surfaceCreated//サーフェスが最初に作成された直後に呼び出され
|
366
|
+
|
367
|
+
(SurfaceHolder holder) {
|
368
|
+
|
369
|
+
mFrom = System.currentTimeMillis();//開始時間
|
370
|
+
|
371
|
+
mSensorManager.registerListener(this, mGSensor, SensorManager.SENSOR_DELAY_GAME);
|
372
|
+
|
373
|
+
playvideo();
|
374
|
+
|
375
|
+
}
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
@Override
|
380
|
+
|
381
|
+
public void surfaceChanged//サーフェスに構造的な変更(フォーマットまたはサイズ)が行われた直後に呼び出される
|
382
|
+
|
383
|
+
(SurfaceHolder holder, int format, int width, int height) {//SurfaceHolderホルダー, int形式、,int幅、int height
|
384
|
+
|
385
|
+
mSurfaceWidth = width;
|
386
|
+
|
387
|
+
mSurfaceHeight = height;
|
388
|
+
|
389
|
+
mBallX = width / 2;//開始した時のボールの位置
|
390
|
+
|
391
|
+
mBallY = 0;//開始した時のボールの位置
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
}
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
@Override
|
400
|
+
|
401
|
+
public void surfaceDestroyed(SurfaceHolder holder)//サーフェスが破棄される直前に呼び出される
|
402
|
+
|
403
|
+
{mSensorManager.unregisterListener(this);
|
404
|
+
|
405
|
+
}//イベントリスナーの解除
|
406
|
+
|
407
|
+
|
408
|
+
|
409
|
+
/*@Override
|
410
|
+
|
411
|
+
protected void onDestroy() {
|
412
|
+
|
413
|
+
super.onDestroy();
|
414
|
+
|
415
|
+
if (player.isPlaying()) {
|
416
|
+
|
417
|
+
player.stop();
|
260
418
|
|
261
419
|
}
|
262
420
|
|
263
|
-
|
264
|
-
|
265
|
-
}
|
266
|
-
|
267
|
-
private void restart(Context cnt, int period){//リセットする関数
|
268
|
-
|
269
|
-
Intent mainActivity = new Intent(cnt, MainActivity.class);
|
270
|
-
|
271
|
-
PendingIntent pendingIntent = PendingIntent.getActivity(cnt, 0, mainActivity, PendingIntent.FLAG_CANCEL_CURRENT);
|
272
|
-
|
273
|
-
AlarmManager alarmManager = (AlarmManager)cnt.getSystemService(Context.ALARM_SERVICE);
|
274
|
-
|
275
|
-
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + period, pendingIntent);
|
276
|
-
|
277
|
-
}
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
private void playvideo() {
|
282
|
-
|
283
|
-
VideoView v = (VideoView)findViewById(R.id.v);
|
284
|
-
|
285
|
-
// 動画の指定(mp4の読込み)
|
286
|
-
|
287
|
-
v.setVideoURI(Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.out));
|
288
|
-
|
289
|
-
// 再生スタート
|
290
|
-
|
291
|
-
v.start();
|
292
|
-
|
293
|
-
v.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
@Override
|
298
|
-
|
299
|
-
public void onCompletion(MediaPlayer mp) {
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
drawCanvas();
|
304
|
-
|
305
|
-
}
|
306
|
-
|
307
|
-
});
|
308
|
-
|
309
|
-
}
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
private void drawCanvas() {
|
316
|
-
|
317
|
-
Canvas c = mHolder.lockCanvas();//サーフェス内のピクセルの編集を開始します.lockで始まりunlockで終わり
|
318
|
-
|
319
|
-
c.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
|
320
|
-
|
321
|
-
Paint paint = new Paint();//既定の設定で新しいペイントを作成します
|
322
|
-
|
323
|
-
paint.setColor(Color.WHITE);//1個上のpaintをsetColorでimportのColorを使って白に変える
|
324
|
-
|
325
|
-
c.drawCircle(mBallX, mBallY, RADIUS, paint);//cというキャンバスにpaintを使って絵を描く
|
326
|
-
|
327
|
-
mHolder.unlockCanvasAndPost(c);//キャンバス解放
|
328
|
-
|
329
|
-
}
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
@Override
|
334
|
-
|
335
|
-
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
336
|
-
|
337
|
-
}
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
@Override
|
342
|
-
|
343
|
-
protected void onResume() {//Activityが表示された時
|
344
|
-
|
345
|
-
super.onResume();
|
346
|
-
|
347
|
-
mSensorManager.registerListener(this, mGSensor, SensorManager.SENSOR_DELAY_GAME);
|
348
|
-
|
349
|
-
}
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
@Override
|
354
|
-
|
355
|
-
protected void onPause() {
|
356
|
-
|
357
|
-
super.onPause();
|
358
|
-
|
359
|
-
mSensorManager.unregisterListener(this);
|
360
|
-
|
361
|
-
}
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
@Override
|
368
|
-
|
369
|
-
public void surfaceCreated//サーフェスが最初に作成された直後に呼び出され
|
370
|
-
|
371
|
-
(SurfaceHolder holder) {
|
372
|
-
|
373
|
-
mFrom = System.currentTimeMillis();//開始時間
|
374
|
-
|
375
|
-
mSensorManager.registerListener(this, mGSensor, SensorManager.SENSOR_DELAY_GAME);
|
376
|
-
|
377
|
-
playvideo();
|
378
|
-
|
379
|
-
}
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
@Override
|
384
|
-
|
385
|
-
public void surfaceChanged//サーフェスに構造的な変更(フォーマットまたはサイズ)が行われた直後に呼び出される
|
386
|
-
|
387
|
-
(SurfaceHolder holder, int format, int width, int height) {//SurfaceHolderホルダー, int形式、,int幅、int height
|
388
|
-
|
389
|
-
mSurfaceWidth = width;
|
390
|
-
|
391
|
-
mSurfaceHeight = height;
|
392
|
-
|
393
|
-
mBallX = width / 2;//開始した時のボールの位置
|
394
|
-
|
395
|
-
mBallY = 0;//開始した時のボールの位置
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
}
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
@Override
|
404
|
-
|
405
|
-
public void surfaceDestroyed(SurfaceHolder holder)//サーフェスが破棄される直前に呼び出される
|
406
|
-
|
407
|
-
{mSensorManager.unregisterListener(this);
|
408
|
-
|
409
|
-
}//イベントリスナーの解除
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
/*@Override
|
414
|
-
|
415
|
-
protected void onDestroy() {
|
416
|
-
|
417
|
-
super.onDestroy();
|
418
|
-
|
419
|
-
if (player.isPlaying()) {
|
420
|
-
|
421
|
-
player.stop();
|
422
|
-
|
423
|
-
}
|
424
|
-
|
425
421
|
player.release();
|
426
422
|
|
427
423
|
}*/
|