阅读更多

 

 



 

 

 

package com.curiousby.baoyou.cn.DemoMediaPlayer.activity;import android.app.Activity;import android.media.AudioManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle; import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.SeekBar;import java.io.File;import java.io.IOException;import java.util.Timer;import java.util.TimerTask;import com.curiousby.baoyou.cn.R;    /*    *    *1.VideoView本身就是对SurfaceView和MediaPlayer做了一个封装    *2.实现视频列表播放    *    * 如果读取本地文件,和网络的话 需要添加权限    *    * */public class MainActivity extends  Activity {    private MediaPlayer mediaPlayer;    private SurfaceView surfaceView;     private SeekBar seekbar;            //读取本地文件    private File file=new File("/storage/emulated/legacy/Pictures/Screenshots", "1.mp4");        //访问网络视频    private String uri="http://7xqwgk.com1.z0.glb.clouddn.com/mysqlconsole.mp4";protected TimerTask timeTask; private Timer timer;    @Override    protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.e("baoyou", "file.exists()"+file.exists());        seekbar = (SeekBar) findViewById(R.id.sb_video_seekbar);        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);        mediaPlayer = new MediaPlayer();        //获取SurfaceHolder 可以通过该接口来操作SurfaceView中的Surface        SurfaceHolder surfaceHolder = surfaceView.getHolder();        //设置Meiaplayer的准备监听        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {            @Override            public void onPrepared(MediaPlayer mp) {                //准备完成后播放                mediaPlayer.start();            }        });                surfaceHolder.addCallback(new SurfaceHolder.Callback() {           //当SurfaceView中Surface创建时回掉            //该方法表示Surface已经创建完成,可以在该方法中进行绘图操作            @Override            public void surfaceCreated(SurfaceHolder holder) {                mediaPlayer.reset();                try {                //设置视屏文件图像的显示参数                mediaPlayer.setDisplay(holder);                // file.getAbsolutePath(); //本地视频                seekbar.setEnabled(true);                 //Log.e("baoyou", file.length()+""+"=========mediaPlayer.getDuration()=========");               // seekbar.setMax(Integer.parseInt(file.length()+""));                 mediaPlayer.setDataSource(file.getAbsolutePath());                //uri 网络视频                //mediaPlayer.setDataSource(MainActivity.this, Uri.parse(uri));                //prepare();表示准备工作同步进行,(准备工作在UI线程中进行)                //当播放网络视频时,如果网络不要 会报ARN 所以不采用该方法                mediaPlayer.prepare();                //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法                //mediaPlayer.prepareAsync();                                timer=new  Timer();                timeTask=new TimerTask() {                                         @Override                    public void run() {                     Log.e("baoyou", mediaPlayer.getCurrentPosition()+"=========mediaPlayer.getCurrentPosition()=========");                                          int position = mediaPlayer.getCurrentPosition();                           int duration = mediaPlayer.getDuration();                                                      if (duration > 0) {                               long pos = seekbar.getMax() * position / duration;                               seekbar.setProgress((int) pos);                           }                                               }                };                     timer.schedule(timeTask, 0, 1000);                                                } catch (Exception e) {                    e.printStackTrace();                }            }            //当SurfaceView的大小发生改变时候触发该方法            @Override            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            }            //Surface销毁时回掉            //当Surface销毁时候,同时把MediaPlayer也销毁            @Override            public void surfaceDestroyed(SurfaceHolder holder) {                if (mediaPlayer!=null) {                    mediaPlayer.stop();                    //释放资源                    mediaPlayer.release();                }            }        });        //设置 surfaceView点击监听        surfaceView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_DOWN:                        if (mediaPlayer.isPlaying()) {                            mediaPlayer.pause();                        } else {                            mediaPlayer.start();                        }                        break;                }                //返回True代表事件已经处理了                return true;            }        });                    }            }

 

 

 

 

                                                             

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。


android mediaplayer SurfaceView_第1张图片android mediaplayer SurfaceView_第2张图片android mediaplayer SurfaceView_第3张图片
 
 
 谢谢您的赞助,我会做的更好!

 

 

 

 

 

 

 

 

 

 

 

 

  • android mediaplayer SurfaceView_第4张图片
  • 大小: 4.4 MB
  • 查看图片附件

更多相关文章

  1. android 获取屏幕尺寸大小
  2. canvas.drawRoundRect方法,绘制圆角矩形
  3. Android中Gallery来显示图片
  4. Android PopupWindow显示位置和显示大小
  5. Android图片按比例缩放
  6. Glide 加载图片时大时小
  7. android adapter 异步加载图片
  8. android抓log方法
  9. Android 通过HTTP POST 上传图片文件

随机推荐

  1. 代码优化-表驱动编程
  2. 调用快递100接口物流信息错误常见问题和
  3. 快递100下单未知错误?快递100寄件/同城配
  4. 快递100显示查询错误?快递100快递查询类F
  5. 快递100参数错误-面单类错误(电子面单/发
  6. 快递100账户错误详解-接口账号,业务,增值
  7. 作业内容:oop基础:请举例实例演绎以下难点
  8. php面向对象之对象成员,静态成员,继承
  9. opp基础:类与对象的 类的继承和调用 构造
  10. 0805作业 找出数组偶数 和 计算器