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(); } }
相关文章推荐
- 深入理解StringBuilder的使用方法
- 新增crawlingtosea.loaders.LoaderBitmapqueue包
- [LeetCode] Top K Frequent Elements
- DirectUI浅谈
- Material Design(三)--UI控件之CardView
- Material Design(二)--UI控件之RecyclerView
- build.gradle中引入jar
- could not execute query 项目中使用使用Hibernate作为持久层框架时,数据库改名后容易忽略的问题
- asyUI tree点击文字展开节点
- [GUIDE] How to Setup Ubuntu 16.04 LTS Xenial Xerus for Compiling Android ROMs
- UI设计——磨皮
- quickstack is a tool to take call stack
- 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
- GetBuiltProjectOutputRecursive error running Xamarin Forms iOS on Visual Studio
- Android 在其他线程中更新UI线程的解决方法
- UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法
- iOS开发遇到的那些坑之 NSURLRequest开发之URL编码
- Java GUI编程
- 查libevent不能编译出动态库问题
- iOS图形绘制UIBezierPath篇