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;
    }
}

}

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

相关文章推荐

PL/SQL Developer 客户端连接oracle 11.2.0.1.0 服务器 配置步骤

需要远程连接的oracle服务器的版本是: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip Linux 系...

unity3d插入android有米广告

有米官网:http://www.youmi.net/register?r=MTI0MDg= 国内的广告,我觉得万普和有米还不错,我也只试了这两个,其他的都是看评价的,呵呵~~~首先我们去有米官网...

Android开发笔记之广播,service实现音乐的播放暂停停止快进等功能

利用广播实现音乐的播放暂停停止快进等功能

android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)

写UI布局:

Android开发总结笔记 SeekBar(滑块条) 1-1-13

SeekBar的API上只有一个setOnSeekBarChangeListener这么一个方法 其他的方法都来自于ProgressBar 另外SeekBar还有一个xml属性androi...

android开发笔记之多媒体—MediaPlayer + SurfaceView播放视频

前面我们讲了用VideoView来播放视频,这里再介绍一种方式:MediaPlayer + SurfaceView 来播放视频,我们都知道:MediaPlayer 是用来播放音频的SurfaceVie...

Android开发之seekbar动态显示进度

之前很想实现一种效果:Android使用SeekBar时动态显示进度且随SeekBar一起移动,嘿嘿,看过程!...

[Android开发]仿天天P图带气泡显示百分比进度的自定义SeekBar

仿天天P图图像美化修改工具,素材来自于天天P图
  • oShunz
  • oShunz
  • 2015年12月22日 14:01
  • 3698

opencv2/3播放视频实现进度条显示拖动、快进、快退、逐帧播放、显示当前帧于图像

方便调试,写了个opencv实现进度切换的程序 主要功能: void ShowHelpText() { //输出欢迎信息和OpenCV版本 printf("\n\n --------------...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer
举报原因:
原因补充:

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