package com.zzk.a1505surfaceview;
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.SurfaceView;
import android.view.View;
import android.widget.*;
public class MainActivity extends AppCompatActivity {
SurfaceView surfaceView;
MediaPlayer player;
SeekBar seekBar;
Handler handler;
Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(ll);
Button btnPlay = new Button(this);
btnPlay.setText("Play");
ll.addView(btnPlay);
btnPlay.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
player.setDisplay(surfaceView.getHolder());
player.start();
startTimer();
}
});
Button btnStop = new Button(this);
btnStop.setText("Stop");
ll.addView(btnStop);
btnStop.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
//player.stop(); // stop后player对象不能再播放
player.pause();
player.seekTo(0);
stopTimer();
}
});
Button btnPause = new Button(this);
btnPause.setText("Pause");
ll.addView(btnPause);
btnPause.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
if(player.isPlaying()){
player.pause();
stopTimer();
((Button)arg0).setText("Continue");
} else {
player.start();
startTimer();
((Button)arg0).setText("Pause");
}
}
});
Button btnReset = new Button(this);
btnReset.setText("Reset");
ll.addView(btnReset);
btnReset.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
//player.reset(); // reset后需要重新设置视频来源
player.seekTo(0);
}
});
player = MediaPlayer.create(this, R.raw.demo);
surfaceView = new SurfaceView(this);
surfaceView.getHolder().setFixedSize(1080, 720);
//player.setDisplay(surfaceView.getHolder()); // 不能在此设置,因为surfaceView还未准备好,在play按钮按下时再设置即可
ll.addView(surfaceView);
seekBar = new SeekBar(this);
seekBar.setMax(100);
ll.addView(seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
int pos = seekBar.getProgress() * player.getDuration() / seekBar.getMax();
player.seekTo(pos);
}
});
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer arg0) {
stopTimer();
}
});
initTimer();
}
protected void onDestroy(){
super.onDestroy();
stopTimer();
player.release();
}
void initTimer(){
handler = new Handler();
runnable = new Runnable(){
@Override
public void run() {
int d = player.getDuration();
int p = player.getCurrentPosition();
seekBar.setProgress(p*seekBar.getMax()/d);
handler.postDelayed(runnable, 1000);
}
};
}
void startTimer(){
handler.postDelayed(runnable, 1000);
}
void stopTimer(){
handler.removeCallbacks(runnable);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android多媒体功能开发-使用SurfaceView和MediaPlayer播放视频的例子
共113个文件
xml:70个
webp:10个
properties:7个
需积分: 0 5 下载量 198 浏览量
2023-11-15
15:35:55
上传
评论
收藏 5.08MB ZIP 举报
温馨提示
例子中使用SurfaceView控件显示视频,使用MediaPlayer控制视频播放。
资源推荐
资源详情
资源评论
收起资源包目录
Android多媒体功能开发-使用SurfaceView和MediaPlayer播放视频的例子 (113个子文件)
gradlew.bat 3KB
executionHistory.bin 592KB
fileHashes.bin 67KB
outputFiles.bin 21KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 225B
.gitignore 50B
.gitignore 6B
build.gradle 1024B
settings.gradle 332B
build.gradle 291B
gradlew 6KB
1505SurfaceView.app.iml 9KB
1505SurfaceView.iml 923B
gradle-wrapper.jar 58KB
MainActivity.java 4KB
ExampleInstrumentedTest.java 762B
ExampleUnitTest.java 385B
buildOutputCleanup.lock 17B
checksums.lock 17B
executionHistory.lock 17B
dependencies-accessors.lock 17B
fileHashes.lock 17B
demo.mp4 5.26MB
proguard-rules.pro 750B
gradle.properties 1KB
local.properties 425B
gradle-wrapper.properties 236B
cache.properties 51B
gc.properties 0B
gc.properties 0B
gc.properties 0B
ic_launcher_round.webp 8KB
ic_launcher_round.webp 6KB
ic_launcher_round.webp 4KB
ic_launcher.webp 4KB
ic_launcher_round.webp 3KB
ic_launcher.webp 3KB
ic_launcher.webp 2KB
ic_launcher_round.webp 2KB
ic_launcher.webp 1KB
ic_launcher.webp 982B
workspace.xml 6KB
ic_launcher_background.xml 5KB
ic_launcher_foreground.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml 1KB
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml 1KB
Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml 1KB
Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml 1KB
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 1KB
Gradle__com_google_android_material_material_1_4_0_aar.xml 1015B
Gradle__androidx_transition_transition_1_2_0_aar.xml 1013B
Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml 1013B
Gradle__androidx_appcompat_appcompat_1_3_0_aar.xml 1004B
Gradle__androidx_activity_activity_1_2_3_aar.xml 995B
Gradle__androidx_fragment_fragment_1_3_4_aar.xml 995B
Gradle__androidx_test_monitor_1_4_0_aar.xml 981B
Gradle__androidx_test_ext_junit_1_1_3_aar.xml 978B
Gradle__androidx_test_runner_1_4_0_aar.xml 974B
Gradle__androidx_print_print_1_0_0_aar.xml 968B
Gradle__androidx_core_core_1_5_0_aar.xml 959B
Gradle__androidx_test_core_1_4_0_aar.xml 958B
Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml 944B
Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml 913B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 912B
Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml 908B
Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml 904B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml 902B
Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml 898B
Gradle__androidx_appcompat_appcompat_resources_1_3_0_aar.xml 878B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml 877B
Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml 874B
Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 872B
Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml 866B
Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml 858B
Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 850B
Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml 842B
Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 842B
themes.xml 837B
themes.xml 837B
Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml 836B
Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 836B
Gradle__androidx_customview_customview_1_0_0_aar.xml 826B
Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml 825B
Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml 818B
Gradle__androidx_test_services_storage_1_4_0_aar.xml 814B
Gradle__androidx_cardview_cardview_1_0_0_aar.xml 810B
AndroidManifest.xml 801B
Gradle__androidx_loader_loader_1_0_0_aar.xml 794B
Gradle__org_hamcrest_hamcrest_integration_1_3.xml 789B
activity_main.xml 780B
gradle.xml 765B
Gradle__org_hamcrest_hamcrest_library_1_3.xml 760B
Gradle__org_hamcrest_hamcrest_core_1_3.xml 740B
Gradle__com_squareup_javawriter_2_1_1.xml 733B
Gradle__javax_inject_javax_inject_1.xml 719B
Gradle__junit_junit_4_13_2.xml 677B
Gradle__junit_junit_4_12.xml 663B
Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml 658B
共 113 条
- 1
- 2
资源评论
nanoage
- 粉丝: 42
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功