想到啥写啥第一期:Android的MediaPlayer和VideoView简单使用

夙愿已清 提交于 2020-01-20 21:18:46

想到啥写啥第一期:致力于更简单易懂的代码解决我们安卓小白遇到的问题


今天就写音频播放和视频播放吧,是MediaPlayer,VideoView的知识点

1.用Mediaplayer播放音频,用seekBar去监听,然后就是手机播放器差不多的效果,难看是难看了点,然后什么播放暂停按钮可以自己添加哈!在这里插入图片描述

上代码 .xml

<TextView
        android:id="@+id/start"
        android:layout_width="80sp"
        android:text="00:00"
        android:gravity="center"
        android:textSize="20sp"
        android:layout_height="50sp"/>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="220sp"
        android:layout_height="50sp"/>
    <TextView
        android:id="@+id/end"
        android:text="00:00"
        android:gravity="center"
        android:textSize="20sp"
        android:layout_width="80sp"
        android:layout_height="50sp"/>

.java

public class Audio extends AppCompatActivity {
    private TextView start,end;
    private SeekBar seekBar;
    private MediaPlayer player;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.audio);
        start = findViewById(R.id.start);
        end = findViewById(R.id.end);
        seekBar = findViewById(R.id.seekBar);
        player = MediaPlayer.create(this,R.raw.what);

获取总时间,然后转换格式,这个转换格式的代码还是感觉蛮好用的啊哈哈
        int endTime = player.getDuration();
        SimpleDateFormat format = new SimpleDateFormat("mm:ss");
        									//这里就是想转换成的格式编写
        Date date = new Date(endTime);
        String _endTime = format.format(date);
        end.setText(_endTime);

        seekBar.setMax(endTime);

        player.start();    嗯,如果想停止的话就用pause()方法
        new MyThread().start();  
        刚学了一点点线程嘿嘿,用Thread开启一个子线程去监督这个进度条和音乐播放到哪里了

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                player.seekTo(seekBar.getProgress());
                if (!player.isPlaying())player.start();
	这里应该是在手指改变进度条之后产生的操作,
	我一行用来同步进度条和播放进度,
	一行用来在播放暂停之后再去改变进度条也能继续播放
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        用来释放内存啥的,不过这里老报错,也不知道咋整,不过都是退出应用才报错,就没去管它
        if (player.isPlaying())player.pause();
        if (player!=null){
            player.release();
            player = null;
        }
    }

    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (seekBar.getProgress()<=player.getDuration()){
                seekBar.setProgress(player.getCurrentPosition());
                //同上获取总时长的操作,获取当前进度,并且转换
                int startTime = player.getCurrentPosition();
                SimpleDateFormat format = new SimpleDateFormat("mm:ss");
                Date date = new Date(startTime);
                String _startTime = format.format(date);
                start.setText(_startTime);
            }
        }
    }

好啦,播放音频就结束了


2. 然后是播放视频,这个感觉会简单很多,我就把MediaPlayerController也加进去了

上代码 .xml

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

.java

public class Video extends AppCompatActivity {
    private VideoView videoView;
    private MediaController controller;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.video);
        实例化并且给出本地的视频地址
        videoView = findViewById(R.id.videoView);
        videoView.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/raw/video"));
       
        controller实例化然后与mediaPlayer相互缠绵(就是我添加你,你添加我)
        controller = new MediaController(this);
        videoView.setMediaController(controller);
        controller.setMediaPlayer(videoView);
        
        videoView.start();  //暂停好像也是pause()
        监听是否放完了,放完了就再来一遍,按照个人需求写就行了
        它还有一些监听,什么预处理啊,报错监听啊,点击监听啊,就不多说了,很烦,遇到了再说吧.........
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                videoView.start();
            }
        });
    }

    @Override
    protected void onDestroy() {
    和音频一样都要释放,不过释放内存的方法不一样
        super.onDestroy();
        if (videoView!=null){
            videoView.suspend();
            videoView = null;
        }
    }
}

真·短小,嗯,就说到这里 ,么么哒(づ ̄ 3 ̄)づ

日常祝各位看官老爷早生贵子,福如东海啊哈哈哈(日常瞎用成语)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!