注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

姑射道人的博客

博客新地址:nixuchen.com

 
 
 

日志

 
 

Android音乐播放器的播放进度条(转)  

2014-01-11 15:33:22|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

音乐播放是MediaPlayer这个类控制的,进度条SeekBar可以用来显示播放进度,用户也可以利用SeekBar的滑块来控制音乐的播放。两个按钮一个用来播放歌曲启动线程,另一个取消线程和停止播放歌曲。

SeekBar:

设置滑块的位置方法为:setProgress(int value);

设置最大值的方法为:setMax(int value);

MusicPlayer:

播放音乐方法为:start();

停止音乐播放的方法为:stop();

控制音乐播放位置为:seekTo(int value);

获得音乐长度为:getDuration();

获得现在播放的位置:getCurrentPosition();

Handler:

启动线程:post(Runnable runnable);

取消线程:removeCallbacks(Runnable runnable);

延迟启动线程(time 单位为毫秒):postDelayed(Runnable, int time);

代码如下:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
public class Test extends Activity {
 
 private Button button1;
 private Button button2;
 private SeekBar seekBar1;
 private MediaPlayer player;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        findView();
        setListener();
    }
    
    private void init() {
     player = MediaPlayer.create(this, R.drawable.example);
    }
    private void findView() {
     button1 = (Button)findViewById(R.id.button1);
     button2 = (Button)findViewById(R.id.button2);
     seekBar1 = (SeekBar)findViewById(R.id.seekbar1);
     //获得歌曲的长度并设置成播放进度条的最大值
  seekBar1.setMax(player.getDuration());
    }
    
    Handler handler = new Handler();
    Runnable updateThread = new Runnable(){
     public void run() {
      //获得歌曲现在播放位置并设置成播放进度条的值
        seekBar1.setProgress(player.getCurrentPosition());
      //每次延迟100毫秒再启动线程
      handler.postDelayed(updateThread, 100);
     }
    };
    
    private void setListener() {
     button1.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0){
          player.start();
          //启动
    handler.post(updateThread);
   }  
     });
     button2.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0) {
    player.stop();
    //取消线程
    handler.removeCallbacks(updateThread);
   } 
     });
     seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress,
     boolean fromUser) {
    // fromUser判断是用户改变的滑块的值
    if(fromUser==true){
     player.seekTo(progress);
    }
   }
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
   }
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub  
   }
     });
    }
                             
}

seekBar要绑定setOnSeekBarChangeListener()事件,三个方法第一个是滑块滑动时调用的,第二个是滑动开始滑动时调用的,第三个是滑动停止时调用的。

  评论这张
 
阅读(411)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017