方案一:使用handler控制SeekBar和时间,以视频为例

Android视频音乐播放SeekBar和播放时间同步_第1张图片

布局文件XML

<RelativeLayout        android:id="@+id/video_layout"        android:layout_width="match_parent"        android:layout_height="220dp"        android:layout_below="@+id/videoPlay_name"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true">        <VideoView            android:id="@+id/vv_player"            android:layout_width="match_parent"            android:layout_height="200dp" />        <LinearLayout            android:layout_alignParentBottom="true"            android:layout_width="match_parent"            android:layout_height="20dp"            android:orientation="horizontal"            android:weightSum="1">            <TextView                android:id="@+id/video_now_time"                android:layout_width="wrap_content"                android:layout_height="20dp"                android:text="00:00:00"/>            <SeekBar                android:id="@+id/video_seekBar"                android:layout_width="wrap_content"                android:layout_height="20dp"                android:layout_weight="1.00" />            <TextView                android:id="@+id/video_total_time"                android:layout_width="wrap_content"                android:layout_height="20dp"                android:text="00:00:00" />        LinearLayout>    RelativeLayout>    <ImageView        android:id="@+id/video_play"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/video_layout"        android:layout_centerHorizontal="true"        android:layout_marginTop="17dp"        android:maxHeight="40dp"        android:adjustViewBounds="true"/>

JAVA代码VideoPlay.java

package com.example.videoplay;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.TextView;import android.widget.VideoView;public class VideoPlay extends Activity implements View.OnClickListener{    private VideoView vv_player;    private TextView videoPlay_name,video_now_time,video_total_time;    private ImageView play;    private ImageView back;    private SeekBar video_seekBar;    private boolean isPlaying;    public static final int UPDATE_UI = 1;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_video_play);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = getWindow();            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(getResources().getColor(R.color.system));        }        /*            加载布局         */        loadView();        video_seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onStopTrackingTouch(SeekBar seekBar) {                int process = seekBar.getProgress();                if(vv_player != null && vv_player.isPlaying()) {                    vv_player.seekTo(process);                }            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) {                // TODO Auto-generated method stub            }            @Override            public void onProgressChanged(SeekBar seekBar, int progress,                                          boolean fromUser) {                // TODO Auto-generated method stub            }        });    }    //更新时间    private void updateTime(TextView textView,int millisecond){        int second = millisecond/1000;        int hh = second / 3600;        int mm = second % 3600 / 60;        int ss = second % 60;        String str = null;        if(hh!=0){            str = String.format("%02d:%02d:%02d",hh,mm,ss);        }else {            str = String.format("%02d:%02d",mm,ss);        }        textView.setText(str);    }    private Handler UIhandle = new Handler(){        @Override        public void handleMessage(Message msg){            super.handleMessage(msg);            if(msg.what==UPDATE_UI) {                int position = vv_player.getCurrentPosition();                int totalduration = vv_player.getDuration();                video_seekBar.setMax(totalduration);                video_seekBar.setProgress(position);                updateTime(video_now_time,position);                updateTime(video_total_time,totalduration);                UIhandle.sendEmptyMessageDelayed(UPDATE_UI, 500);            }        }    };    //加载整个view视图,自动播放视频    public void loadView(){        //加载videoview控件        vv_player = (VideoView)findViewById(R.id.vv_player);        videoPlay_name = (TextView) findViewById(R.id.videoPlay_name);        play = (ImageView) findViewById(R.id.video_play);        back = (ImageView) findViewById(R.id.video_back);        play.setOnClickListener(this);        back.setOnClickListener(this);        play.setImageResource(R.drawable.pause);        back.setImageResource(R.drawable.back);        video_seekBar = findViewById(R.id.video_seekBar);        video_now_time = findViewById(R.id.video_now_time);        video_total_time = findViewById(R.id.video_total_time);        //设置服务器视频资源路径        Intent intent = getIntent();        String address = intent.getStringExtra("address");        String name = intent.getStringExtra("name");        videoPlay_name.setText(name);        Uri uri =  Uri.parse(address);        vv_player.setVideoURI(uri);        //设置本地视频资源路径    //  vv_player.setVideoPath("/sdcard/video/test.mp4");        //MediaController mc = new MediaController(VideoPlay.this);        //mc.setVisibility(View.INVISIBLE);        //vv_player.setMediaController(mc);        //设置焦点        vv_player.requestFocus();        //播放        vv_player.start();        UIhandle.sendEmptyMessage(UPDATE_UI);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.video_play:                if(vv_player.isPlaying()){                    vv_player.pause();                    play.setImageResource(R.drawable.play);                }else{                    vv_player.start();                    play.setImageResource(R.drawable.pause);                }                break;            case R.id.video_back:                this.finish();                break;        }    }}

方案二:使用进程控制SeekBar

JAVA代码MusicPlay.java

public class MusicPlay extends Activity implements View.OnClickListener{    private TextView music_name;    private ImageView play;    private SeekBar seekBar;    private Boolean isplaying;    private ImageView back;    private TextView music_now_time,music_total_time;    private static final int UPDATE_TIME = 2;    private MediaPlayer mediaPlayer;    private String url;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg){            super.handleMessage(msg);            switch (msg.what){                case 1:                    play.setImageResource(R.drawable.pause);                    break;                case UPDATE_TIME:{                    /**                     * 更新时间                     */                    int position = mediaPlayer.getCurrentPosition();                    int totalduration = mediaPlayer.getDuration();                    updateTime(music_now_time,position);                    updateTime(music_total_time,totalduration);                    handler.sendEmptyMessageDelayed(UPDATE_TIME, 500);                }                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_music_play);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = getWindow();            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(getResources().getColor(R.color.system));        }        music_name = (TextView) findViewById(R.id.music_name);        seekBar = (SeekBar) findViewById(R.id.music_seekBar);        play = (ImageView) findViewById(R.id.play);        back = (ImageView) findViewById(R.id.music_back);        back.setOnClickListener(this);        play.setOnClickListener(this);        music_now_time = (TextView) findViewById(R.id.music_now_time);        music_total_time = (TextView) findViewById(R.id.music_total_time);        initMediaPlayer();        initView();        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onStopTrackingTouch(SeekBar seekBar) {                int process = seekBar.getProgress();                if(mediaPlayer != null && mediaPlayer.isPlaying()) {                    mediaPlayer.seekTo(process);                }            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) {                // TODO Auto-generated method stub            }            @Override            public void onProgressChanged(SeekBar seekBar, int progress,                                          boolean fromUser) {                // TODO Auto-generated method stub            }        });    }    private void updateTime(TextView textView,int millisecond){        int second = millisecond/1000;        int hh = second / 3600;        int mm = second % 3600 / 60;        int ss = second % 60;        String str = null;        if(hh!=0){            str = String.format("%02d:%02d:%02d",hh,mm,ss);        }else {            str = String.format("%02d:%02d",mm,ss);        }        textView.setText(str);    }    private void initView(){        /**         * 初始化播放暂停键         */        new Thread(new Runnable() {            @Override            public void run() {                Message message = new Message();                message.what = 1;                handler.sendMessage(message);            }        }).start();    }    private void initMediaPlayer() {        Intent intent = getIntent();        url = intent.getStringExtra("address");        String name = intent.getStringExtra("name");        music_name.setText(name);        new Thread(new Runnable() {            @Override            public void run() {                mediaPlayer = new MediaPlayer();                try {                    mediaPlayer = MediaPlayer.create(MusicPlay.this, Uri.parse(url));                    mediaPlayer.start();                    handler.sendEmptyMessage(UPDATE_TIME);                    int max = mediaPlayer.getDuration();                    seekBar.setMax(max);                    /**                    *开启进程控制SeekBar                    */                    new Thread() {                        public void run() {                            isplaying = true;                            while (isplaying) {                                int position = mediaPlayer.getCurrentPosition();                                seekBar.setProgress(position);                                try {                                    Thread.sleep(500);                                } catch (InterruptedException e) {                                    // TODO Auto-generated catch block                                    e.printStackTrace();                                }                            }                        }                    }.start();                    mediaPlayer.setLooping(false);                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.play:{                if(mediaPlayer.isPlaying()){                    mediaPlayer.pause();                    play.setImageResource(R.drawable.play);                } else{                    mediaPlayer.start();                    play.setImageResource(R.drawable.pause);                }            }break;            case R.id.music_back:                this.finish();                break;        }    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event)  {        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复            mediaPlayer.stop();            this.finish();            return true;        }        return super.onKeyDown(keyCode, event);    }}

更多相关文章

  1. Android中获取系统内存信息以及进程信息-----ActivityManager的
  2. 使用ijkplayer播放一个网络视频
  3. 升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方
  4. Error: Failed to find 'ANDROID_HOME' environment variable.解
  5. Android使用videoview播放res/raw下的视频并在结束后隐藏
  6. Fragment与FragmentActivity间的数据通讯详细解决方案
  7. android获取进程信息,运行内存信息
  8. Android Sync 同步 源码问题解决方案

随机推荐

  1. 前端开发工具安装及使用小结
  2. 如何加快 Node.js 应用的启动速度
  3. Docker 镜像制作教程:针对不同语言的精简
  4. 编写vscode自带插件Ement常用语法并使用
  5. html快捷键/属性/标签学习
  6. VSCode、Chrome安装及HTML页面结构了解
  7. Springboot docker jenkins 自动化部署并
  8. 居中布局列举
  9. MongoDB 4.X CRUD 基本操作说明
  10. 一文了解 Kubernetes