先上图吧,仿照写的进度条

很明显不是系统的自带的进度条,所以我们需要自定义来实现这个效果,先看看官方给的例子

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background"><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ff9d9e9d"android:centerColor="#ff5a5d5a"android:centerY="0.75"android:endColor="#ff747674"android:angle="270"/></shape></item><item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#80ffd300"android:centerColor="#80ffb600"android:centerY="0.75"android:endColor="#a0ffcb00"android:angle="270"/></shape></clip></item><item android:id="@android:id/progress"><clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ffffd300"android:centerColor="#ffffb600"android:centerY="0.75"android:endColor="#ffffcb00"android:angle="270"/></shape></clip></item>
</layer-list>

一个layer-list中包含有三个item,id分别是background,secondaryProgress,progress,分别对应的是背景,缓存进度条(播放视频的时候一般会有个灰色的进度条就是缓存的),自身的进度条。

为了自定义我们仿照上面的格式自己写一个,因为不需要缓存条,我们将中间的去掉,只写两个id

res/drawable/seek_horizontal

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@android:id/background"android:drawable="@drawable/equ_circle_bg"/><item android:id="@android:id/progress"><clip android:drawable="@drawable/equ_circle_bg_c" ></clip></item></layer-list>

两个drawable都是.9文件,一个是灰色,一个是橙色,写完之后我们就能在seekbar中使用了

 <SeekBarandroid:id="@+id/seekBar1"android:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:maxHeight="1dp"android:minHeight="1dp"android:padding="0dp"android:progress="0"android:progressDrawable="@drawable/seek_horizontal"android:thumb="@drawable/iconfont_yuan" />

想要设置宽度的话需要同时设置maxHeight和minHeight,只设置一个是不会生效的,padding是设置seekbar距离两边的间隙,默认是有间隙的,thumb则是进度条上的刻度,写完布局后就能在代码中设置了。

先继承OnSeekBarChangeListener接口并实现方法

 @Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// Log.i("---" + Tag, "" + MusicService.getCurrent());// Log.i("---" + Tag, "" + MusicService.getDuration());}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {int progress = seekBar.getProgress();Log.i("---" + Tag, "" + progress);Intent intent = new Intent();intent.setAction(Constants.ACTION_SEEK);intent.putExtra("progress", progress);sendBroadcast(intent);}

分别是进度条改变,开始移动进度条,停止移动进度条。上面的发送广播是在进度条调整完后需要将进度发送给service,让MediaPlayer改变当前播放的进度。

除此之外我们还要新开一个线程不断的更新进度条和播放的时间

class LooperThread extends Thread {@Overridepublic void run() {while (isTrue) {try {handler2.sendMessage(new Message());Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}

设置sleep为1秒,就是每隔一秒更新一次进度条和播放进度

private Handler handler2 = new Handler() {public void handleMessage(Message msg) {if (MusicService.isPlaying) {long current = MusicService.getCurrent();long duration = MusicService.getDuration();String text_current = MediaUtil.formatTime(current);mTexting.setText(text_current);long a = 100L * current / duration;int progress = new Long(a).intValue();mSeekBar.setProgress(progress);}};};

先判断播放的状态,只有播放的时候才会更新,除此之外在返回时需要将进程停止掉,不然占有线程,也无法释放内存,开始试了一下普通的方法直接调用stop方法,发现还是会执行,只有给一个状态值,让run方法不再执行就可以了。

@Overridepublic void onBackPressed() {super.onBackPressed();// 按返回键时将isTrue设为false,让线程不再继续isTrue = false;finish();}

Android仿虾米音乐播放器之自定义进度条seekbar相关推荐

  1. android 音乐播放器的状态栏通知,Android仿虾米音乐播放器之通知栏notification解析...

    通知栏notification是Android中一个很重要的组件,可以在顶部状态栏中存在,用户也可以通过此来操作应用,在Android中只有3.0以上的版本才加入了notification的按钮点击功 ...

  2. Android仿虾米音乐播放器之MediaPlayer使用

    MediaPlayer是Android中用来播放媒体文件的一个类,我们用其来播放音乐文件,先介绍用法. 首先MediaPlayer需要实例化对象,我们在onStratCommand中进行实例化. pr ...

  3. Android仿虾米音乐播放器之开篇介绍

    断断续续的写了好久,因为项目已经接近尾声了,所以要开源出来,一开始决定模仿虾米音乐是因为布局UI上比较喜欢,其中最困难的地方应该是多个播放页面的联动,通知,尾部栏,本地音乐选择栏,歌词页面,4个地方需 ...

  4. Android仿虾米音乐播放器之service

    service就是后台服务,不同于activity在前台,虽然用户看不见,但是作用是很大的. 我们在service中先需要实例化mediaplayer对象,这个在上节中已经讲了,除此之外我们需要注册一 ...

  5. Android仿虾米音乐播放器之电话和耳机监听

    任何一个用户都不会希望在电话打来时,音乐依然在播放,这样或许用户马上就卸载了我们的app,另外当用户的耳机拨出时我们需要及时的停止音乐,因为拨出耳机这个动作可能不是用户主导的,或许是耳机的松动,或许是 ...

  6. Android仿虾米音乐播放器之本地音乐获取

    Android系统为了一些常用的信息(如音乐.视频.图像.联系人等)内置了一系列的ContentProvider,所以我们可以通过这个来获取Anroid中本地音乐,首先得加入权限 <uses-p ...

  7. 57.音乐播放器的进度条

    给音乐播放器添加进度条: SeekBar:除了反应播放进度,还可以拖动 ProgressBar:只能显示当前的进度,不能进行拖动编辑 自动改变进度条 音乐播放器通过下面的方法来获取进度条的总时间和当前 ...

  8. React Native (一) react-native-video实现音乐播放器和进度条的功能

    React Native (一) react-native-video实现音乐播放器和进度条的功能 功能: 1.卡片滑动切歌 2.显示进度条 效果图: 第三方组件: 1.react-native-vi ...

  9. android 余额宝收益列表,Android 仿支付宝中的余额宝收益进度条

    一. 看效果 二.上代码 package com.framework.widget; import android.app.Activity; import android.content.Conte ...

最新文章

  1. 自动检索、修复Python代码bug,微软推出DeepDebug
  2. mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
  3. 狼人杀服务器紧急维护中,狼人杀最可怕的武器是那张嘴?禁言长老:你已被管理员禁言一天!...
  4. python memory-management
  5. 基于内容的视频标注——关键帧图象层标注
  6. 复变函数知识总结(1)——序言和准备知识
  7. c语言200行代码大作业含菜单,2018级C语言大作业 - 坦克动荡
  8. 从软件测试转行做前端,转行软件测试或者前端开发有前途么?
  9. python怎么下载panda包_pandas python下载
  10. 光模块SFP基础接口标准入门
  11. win10计算机怎么改中文,win10系统中文语言的设置方法
  12. 游戏翻译,本地化翻译如何做效果好
  13. [ZUCC 计网]BB-quiz-数据链路层测试-2020
  14. 2018 美团校招笔试题详解
  15. 从单块架构到分布式架构之数据库集群(三)
  16. 繁體與簡體之間的轉化
  17. springboot中service中注入dao失败测试类中注入成功_聊一聊 Java 服务端中的乱象
  18. theme vscode 护眼_vscode设置护眼主题
  19. Mybatis : DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
  20. java -version查询到的信息是什么意思?

热门文章

  1. 【R实验.6】基本统计分析
  2. 关于mui 第二次打开选择日期页面,日期被重置的问题!
  3. 首个区块链去中心化广告游戏
  4. php积分排行榜,积分排行榜
  5. 京东云mysql 外网访问_干货|上云了,如何保障云数据库的高可用?
  6. Android开发中synchronized的实现原理
  7. Navicat逆向表到模型
  8. 主板有电无法启动_主板通电但是启动不了怎么办
  9. chrome DevTools 调试技巧
  10. 极光网安实验室web组考核WP