自定义圆形进度条显示MP3播放进度

本篇和大家分享一个非常常见的需求,  圆形进度条显示MP3播放进度,  圆形进度条采用Github上的开源工具ProgressWheel

gitHub地址: https://github.com/Todd-Davies/ProgressWheel



使用说明:

1. 添加 attrs.xml文件到项目的values目录下

2.  在项目根XMl中添加

xmlns:ProgressWheel="http://schemas.android.com/apk/res-auto"

3. 在需要使用圆形进度条的XML中引用自定义控件类
 <com.yangxt.mymp3playerdemo.ProgressWheel
		        android:id="@+id/progressBar"
		        android:layout_width="150dp"
		        android:layout_height="150dp"
		        ProgressWheel:text="播放"
		        ProgressWheel:textColor="#FFFFFF"
		        ProgressWheel:textSize="14sp"
		        
		        ProgressWheel:rimColor="#0095FF"
		       
		        ProgressWheel:barLength="20dp" 
		        ProgressWheel:barColor="#FF0068"
		        ProgressWheel:barWidth="5dp"
		        ProgressWheel:rimWidth="5dp" 
		        ProgressWheel:spinSpeed="3dp" 
		        />

4.  调用 spin()方法开启progress ,   stopSpinning()方法停止progress,  setProgress()设置进度条进度   

package com.yangxt.mymp3playerdemo;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore.Audio.Media;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

/**
 * @author yangxt
 * @date  2014-09-03
 */
public class MainActivity extends Activity {
	
	private ProgressWheel mProgressBar;
	boolean isRunning=false;
	int progress = 0;
	MediaPlayer mPlayer=null;
	Timer mTimer=null;
	TimerTask mTimerTask=null;
	float mGrade=1.00f;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mProgressBar=(ProgressWheel) findViewById(R.id.progressBar);
		
		
	    onClick();
	}


	
		


	public void onClick() {
		mProgressBar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(isRunning) {                          
					    Log.i("TAG","停止播放  停止精度条");
					    if(mTimerTask!=null&&mPlayer.isPlaying()){
					    	Cls();
					     }
						mProgressBar.stopSpinning();
					    mProgressBar.setProgress(0);
					    mProgressBar.setText("播放");
					
						isRunning=false;
						
				}else{                              
						
					    Log.i("TAG","播放音乐   设置进度条");
						isRunning=true;
						mProgressBar.spin();
					    playMp3();
						
						setProgressPosition();   
						
						
						
						
					}
				
				
			}

			
		});
	}

	
	/**
	 * 播放Mp3
	 */
	protected void playMp3() {
	   
				try {
					mPlayer=MediaPlayer.create(MainActivity.this, R.raw.shq);//读取音频  ;
					mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // 设置音频类型
					mPlayer.start();
						
					
				} catch (Exception e) {
					e.printStackTrace();
				} 
				
				
					
				mPlayer.setOnCompletionListener(new OnCompletionListener() {
					
					@Override
					public void onCompletion(MediaPlayer mp) {
						// TODO Auto-generated method stub
						Log.i("TAG","播放结束");
						
						if(mTimerTask!=null&&mPlayer!=null){
							
					    	Cls();
					     }
						
						
						
						mProgressBar.stopSpinning();
					    mProgressBar.setProgress(0);
					    mProgressBar.setText("播放");
					
						isRunning=false;
						
					}

					
				});
				
				
			  
		}
	
	/**
	 * 设置进度条进度
	 */
	public void setProgressPosition() {
		final int duration = mPlayer.getDuration();
		mGrade=duration/360;
		
		mTimer = new Timer();    
		mTimerTask = new TimerTask() {    
		    @Override    
		    public void run() {  
		    	 //Log.i("TAG", "-->"+mPlayer.getCurrentPosition()+"/"+duration);
		    	 runOnUiThread(new Runnable() {

					@Override
					public void run() {
						
						
						float nowPosition=mPlayer.getCurrentPosition()/mGrade;
						mProgressBar.setProgress((int)nowPosition);
						
						float grade=nowPosition/360;
						mProgressBar.setText(String.valueOf(grade).substring(2,4)+"%");
						
					
					}

				});
		    	 
		     	 
		    }    
		};   
		mTimer.schedule(mTimerTask, 0,300);
			
		
	}
	
	
	public void Cls() {
		mPlayer.stop();
		mPlayer.release();
		mPlayer=null;
		
		mTimer.cancel();
		mTimerTask.cancel();
		mTimer=null;
		mTimerTask=null;
	}
	
	
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		if(mTimerTask!=null&&mPlayer!=null){
			
	    	Cls();
	     }
		
		
		super.onPause();
	}
	
	 

}

源码地址:

http://download.csdn.net/detail/u010333409/7864287




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值