Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer

原创 2016年06月01日 23:31:01

播放器常用功能的demo

时间的显示 快进 后退 拖动等等

package com.example.mediaplayer_retry;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

MediaPlayer mMediaPlayer;
Button mPlayButton, mPauseButton, mStopButton, mForWard, mBackWard;
SeekBar mSeekBar;
TextView mTextView_one,mTextView_two;
Handler mHandler = new Handler(){
    public void handleMessage(android.os.Message msg) {
        int currentPosition = mMediaPlayer.getCurrentPosition();
        mSeekBar.setProgress(currentPosition);
        String time = formatTime(currentPosition);
        mTextView_one.setText(time);
        mHandler.sendEmptyMessageDelayed(0, 1000);
    };
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    setPlayListener();
    setPause();
    setStopListener();
    setSeekBarListener();
}

/********************************************************
 * 初始化控件
 */
private void initView() {
    mPlayButton = (Button) findViewById(R.id.media_play);
    mPauseButton = (Button) findViewById(R.id.media_pause);
    mStopButton = (Button) findViewById(R.id.media_stop);
    mForWard = (Button) findViewById(R.id.media_forward);
    mBackWard = (Button) findViewById(R.id.media_backwrad);
    mSeekBar = (SeekBar) findViewById(R.id.main_seekbar);
    mTextView_one = (TextView) findViewById(R.id.main_textview_time_one);
    mTextView_two = (TextView) findViewById(R.id.main_textview_time_two);
    mForWard.setOnClickListener(this);
    mBackWard.setOnClickListener(this);
}

/*******************************************************
 * 必须在方法中初始化mMediaPlayer对象
 * 播放音乐的初始化动作 setDataSource(path)设置音频的路径就是mp3的路径
 * mMediaPlayer.prepare()此方法就是装载音频文件
 * mMediaPlayer.start();此方法必须在上面的方法执行完毕后才可以
 * @param path 传入音频文件的路径参数
 */
public void play(String path) {
    if (mMediaPlayer == null) {
        try {
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.prepare();
            mMediaPlayer.start();
            int position = mMediaPlayer.getDuration();
            mTextView_two.setText(formatTime(position));
            mSeekBar.setMax(position);
            mHandler.sendEmptyMessageDelayed(0, 1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }else if(mMediaPlayer != null && !mMediaPlayer.isPlaying()){
        mMediaPlayer.start();
    }
}

/**********************************************************
 * 设置播放按钮的点击事件 同时执行播放音乐方法 此点击事件采用的是匿名内部类的方式实现的
 */
public void setPlayListener() {
    mPlayButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            play("/sdcard/hello.mp3");
        }
    });
}

/*********************************************************
 * 暂停当前播放的音乐
 */
@SuppressLint("SdCardPath")
public void setPause() {
    if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
        mMediaPlayer.pause();
    }
}

/*************************************************
 * 设置点击暂停按钮的点击事件 同时执行mMediaPlayer的暂停pause方法
 * 此点击事件的方式是采用xml属性中设置onclick这个属性的方法
 */
public void pause(View v) {
    setPause();
}
/************************************************
 * 停止播放音乐的方法
 * 同时我们要释放内存,节约内存
 * 把mMediaPlayer赋值为空,返回到开始播放的状态
 */
public void stop(){
    if(mMediaPlayer != null){
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }
}
/*************************************************
 * 设置停止按钮的监听事件
 * 此按钮的监听事件采用第三种方式
 */
public void setStopListener(){
    mStopButton.setOnClickListener(listener);
}
OnClickListener listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        stop();
    }
};
/***************************************************
 * 设置快进10秒方法
 */
public void forWard(){
    if(mMediaPlayer != null){
        int position = mMediaPlayer.getCurrentPosition();
        mMediaPlayer.seekTo(position + 10000);
    }
}
/*****************************************************
 * 设置后退10秒的方法
 */
public void backWard(){
    if(mMediaPlayer != null){
        int position = mMediaPlayer.getCurrentPosition();
        if(position > 10000){
            position-=10000;
        }else{
            position = 0;
        }
        mMediaPlayer.seekTo(position);
    }
}
/********************************************************
 * 设置seekbar的拖动监听事件
 */
public void setSeekBarListener(){
    mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            if(mMediaPlayer != null && fromUser){
                mMediaPlayer.seekTo(progress);
            }
        }
    });
}
/*******************************************************
 * 关闭当前页面,停止播放
 */
protected void onDestroy() {
    super.onDestroy();
    stop();
}
/********************************************************
 * 设置快进和后退按钮的监听事件
 * @param v
 */
@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.media_forward:
        forWard();
        break;
    case R.id.media_backwrad:
        backWard();
        break;
    default:
        break;
    }
}
/********************************************************
 * 对时间的格式化
 * @param time
 * @return
 */
public static String formatTime(int time){
    if(time/1000%60 <10){
        return time/1000/60 + ":0" + time/1000%60;
    }else{
        return time/1000/60 + ":" + time/1000%60;
    }
}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

自定义播放操作(快进,快退,声音,亮度调节)

自定义播放操作(快进 快退 声音 亮度调节)
  • u012528368
  • u012528368
  • 2017年02月28日 14:06
  • 490

如何实现视频的快进快退功能(整理)

最近在研究视频的播放的快进快退功能,先把相关的调研结果整理一下,做个记录。 裸的H264码流,如果实现快进快退必须基于 I 帧才能实现:在播放前对整个码流进行统计,总共有多少帧,所有的 I 帧在什么位...
  • coloriy
  • coloriy
  • 2015年08月24日 10:11
  • 6515

Android VideoView播放视频控制:开始、暂停、快进(3)

先写一个布局文件(控制按钮):
  • Ke1vin
  • Ke1vin
  • 2015年11月26日 18:40
  • 358

SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换

SuperPlayer 是一个基于 IjkPlayer 的控制器,支持手势操作,滑动快进,快退,支持,上滑音量亮度的变化,支持指点位置播放,播放源的切换...
  • u014608640
  • u014608640
  • 2016年10月27日 09:21
  • 1586

Android入门教程 MediaPlayer教程【使用进度条】

目标:获取手机中的歌曲,并使用MediaPlayer播放歌曲第一步:创建适配器控件第二步:创建适配器第三步:绑定适配器第四步:为MediaPlayer创建播放、暂停、上一曲、下一曲、停止方法第五步:使...
  • jasper_success
  • jasper_success
  • 2016年03月24日 22:37
  • 2275

关于ffmpeg在快进快退上的问题

以下代码转自http://blog.csdn.net/mu399/article/details/5818970
  • u014038534
  • u014038534
  • 2014年11月04日 21:21
  • 1590

ffmpeg播放器快进快退(七)

指导7:快进快退处理快进快退命令现在我们来为我们的播放器加入一些快进和快退的功能,因为如果你不能全局搜索一部电影是很让人讨厌的。同时,这将告诉你av_seek_frame函数是多么容易使用。我们将在电...
  • zx3517288
  • zx3517288
  • 2016年06月25日 22:23
  • 2318

live555的trick play的TS实现快进快退

oes the RTSP implementation (client and/or server) support 'trick mode' operations (i.e., seek, fast...
  • xiaojun111111
  • xiaojun111111
  • 2014年10月08日 22:51
  • 2177

Android 自定义SeekBar显示进度百分比

效果图: 代码实现:package com.tchip.autosetting.view;import com.nineoldandroids.view.ViewHelper; import com...
  • zhoumushui
  • zhoumushui
  • 2017年02月23日 11:15
  • 632

视频框架 Vitamio 使用教程+部分心得 (五) 左右滑动快进快退 + VideoView部分中文API

转载注明出处:http://blog.csdn.net/u010181592/article/category/5893483文章出自 我不只是看客的博客先列出参考资料: - Vitamio 官...
  • u010181592
  • u010181592
  • 2016年08月04日 21:01
  • 6982
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer
举报原因:
原因补充:

(最多只允许输入30个字)