回答編集履歴
2
コード追加
test
CHANGED
@@ -4,3 +4,55 @@
|
|
4
4
|
再生が終わったら何をさせているかといえば、ビデオの URI を設定して start しているのですから、ループするのは当然ではないでしょうか。
|
5
5
|
ループさせたくないのでしたら、なぜソコに再生のコードが入っているのでしょう。
|
6
6
|
|
7
|
+
---
|
8
|
+
v_0 等が switch になっているということはもっと動画が多いものと思いますが、とりあえず v_0~v_2 等に特化としてコードを整理すると以下のようになりました。
|
9
|
+
|
10
|
+
※ テキトウな動画が無かったので動かしていません
|
11
|
+
|
12
|
+
playVideo メソッドにて、next が有効かどうかで onCompleteListener の登録を変えることでループを防いでいます。
|
13
|
+
|
14
|
+
```java
|
15
|
+
import androidx.annotation.*;
|
16
|
+
import androidx.appcompat.app.AppCompatActivity;
|
17
|
+
|
18
|
+
import android.content.*;
|
19
|
+
import android.content.res.Resources;
|
20
|
+
import android.net.Uri;
|
21
|
+
import android.os.Bundle;
|
22
|
+
import android.widget.VideoView;
|
23
|
+
|
24
|
+
public class TEST extends AppCompatActivity {
|
25
|
+
static final @RawRes int[] videos = new int[]{ R.raw.v_0, R.raw.v_1, R.raw.v_2 };
|
26
|
+
|
27
|
+
@Override
|
28
|
+
protected void onCreate(Bundle savedInstanceState) {
|
29
|
+
super.onCreate(savedInstanceState);
|
30
|
+
setContentView(R.layout.activity_test);
|
31
|
+
|
32
|
+
Intent intent = getIntent();
|
33
|
+
int listTitle = intent.getIntExtra("ListTitle", 0);
|
34
|
+
if(listTitle != 1) throw new IllegalArgumentException("ListTitle=" + listTitle);
|
35
|
+
int position = intent.getIntExtra("position", 0);
|
36
|
+
if(position < 0 || videos.length <= position) throw new IllegalArgumentException("position=" + position);
|
37
|
+
|
38
|
+
//videos の動画の再生の後に再生する動画
|
39
|
+
@RawRes int next =
|
40
|
+
intent.getBooleanExtra("isChecked", false) ? R.raw.v_4
|
41
|
+
: intent.getBooleanExtra("isChecked2", false) ? R.raw.v_5
|
42
|
+
: intent.getBooleanExtra("isChecked3", false) ? R.raw.v_6
|
43
|
+
: Resources.ID_NULL;
|
44
|
+
|
45
|
+
VideoView v = findViewById(R.id.v2);
|
46
|
+
|
47
|
+
playVideo(v, videos[position], next);
|
48
|
+
}
|
49
|
+
|
50
|
+
private void playVideo(VideoView v, @RawRes int raw, @RawRes int next) {
|
51
|
+
Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE).authority(getPackageName()).appendPath("" + raw).build();
|
52
|
+
v.setVideoURI(uri);
|
53
|
+
//url の動画の後に再生が必要ならリスナを登録。不要なら null を登録(=既存を削除)
|
54
|
+
v.setOnCompletionListener(next == Resources.ID_NULL ? null : mp -> playVideo(v, next, Resources.ID_NULL));
|
55
|
+
v.start();
|
56
|
+
}
|
57
|
+
}
|
58
|
+
```
|
1
追加
test
CHANGED
@@ -2,5 +2,5 @@
|
|
2
2
|
|
3
3
|
MediaPlayer.OnCompletionListener の onCompletion(MediaPlayer mp) メソッドは、再生が終わったら呼ばれます。
|
4
4
|
再生が終わったら何をさせているかといえば、ビデオの URI を設定して start しているのですから、ループするのは当然ではないでしょうか。
|
5
|
+
ループさせたくないのでしたら、なぜソコに再生のコードが入っているのでしょう。
|
5
6
|
|
6
|
-
|