您的位置:首页 > 产品设计 > UI/UE

Android UI基础之SeekBar--SecondaryProgress

2016-05-15 12:04 246 查看
对于进度条来说,相信大家都不会陌生,因为许多app中都有进度条。本节就不对SeekBar做描述。而是讲一下进度条中很常见,但又容易被忽视的第二进度条----SecondaryProgress

secondProgress最常用的地方就是音乐播放器在连接网络时的缓存进度,下面就以此为例,做一个demo


先看一下效果



seekBar的布局文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:id="@android:id/background"
android:drawable="@color/colorhui">
</item>
<item android:id="@android:id/secondaryProgress">
<scale
android:drawable="@color/colorAccent1"
android:scaleWidth="100%" />
</item>
<item android:id="@android:id/progress">
<scale
android:drawable="@color/colorAccent"
android:scaleWidth="100%" />
</item>

</layer-list>


界面的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.houjie.studyapk.studymedia.music.ActivityMediaInternetMusic">
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:id="@+id/mediaInternetMusicSeekBar"
android:max="100"
android:progressDrawable="@drawable/second_seekbar"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mediaInternetMusicBtn1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mediaInternetMusicBtn2"
android:text="finsh"
android:textAllCaps="false"
/>
</LinearLayout>


代码Activity

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.SeekBar;

import com.example.houjie.studyapk.R;

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

public class ActivityMediaInternetMusic extends AppCompatActivity implements MediaPlayer.OnPreparedListener
,MediaPlayer.OnBufferingUpdateListener{
private SeekBar mSeekBar;
private Button mPaly;
private Button mFinsh;
private MediaPlayer mediaPlayer;
private boolean aBoolean =false;
private boolean onPrepared = false;
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_internet_music);
mFinsh = (Button) findViewById(R.id.mediaInternetMusicBtn2);
mFinsh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mPaly = (Button) this.findViewById(R.id.mediaInternetMusicBtn1);
mPaly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

if(mediaPlayer!=null){
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else {
if(onPrepared){
mediaPlayer.start();
}else {
try {
mediaPlayer.setDataSource("http://abv.cn/music/光辉岁月.mp3");
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
mSeekBar.setMax(mediaPlayer.getDuration());
timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
if(aBoolean){
return;
}
mSeekBar.setProgress(mediaPlayer.getCurrentPosition());
}
};
timer.schedule(timerTask,0,1000);

}
});
mSeekBar = (SeekBar) findViewById(R.id.mediaInternetMusicSeekBar);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
aBoolean = true;
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(onPrepared){
mediaPlayer.seekTo(mSeekBar.getProgress());
}
aBoolean =false;
}
});
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnPreparedListener(this);
}

@Override
public void onPrepared(MediaPlayer mp) {
onPrepared =true;
mediaPlayer.start();
}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
//设置缓存进度,此处传入的进度是按百分比,所以需要计算一下
mSeekBar.setSecondaryProgress(mediaPlayer.getDuration()/100*percent);
Log.e("音乐缓存进度","-------------------------"+percent);
}

@Override
protected void onDestroy() {
mediaPlayer.release();
if(timer!=null){
timer.cancel();
}
super.onDestroy();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: