Android绘制音乐播放器示波器

示波器是在大学的时候老师教的,但是出来工作一直没有用到过,渐渐的也就忘记了,现在重新学习一下。来看看效果图:

这里是一个自定义的柱状图,然后有一个按钮,点击按钮的时候,这里柱子会不停的运动,类似于音乐播放器里示波器的跳动。

跟前面几个自定义view的方式类似,重写了onSizeChange()方法和onDraw()方法
先列一下我们要用到的变量:

/**画笔*/ private Paint mPaint; /**控件的宽度*/ private float mWidth; /**单个柱子的宽度*/ private float mRectWidth; /**单个柱子的高度*/ private float mRectHeight; /**柱子的总个数*/ private float mRectCount = 10; /**柱子之间的间隔*/ private int offsets = 2; /**Android中的线性渐变*/ private LinearGradient mLinearGradient; /**随机的柱子的高度*/ private double mRandom;

所有的变量都在这里了

下面给画笔初始化

/** * 初始化画笔 */ private void initView() { mPaint = new Paint(); mPaint.setAntiAlias(true); }

然后在onSizeChange()里面给变量赋值

@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth * 0.6 / mRectCount); mLinearGradient = new LinearGradient(0, 0, mRectWidth, mRectHeight, Color.YELLOW, Color.BLUE, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); }

最后绘制柱状图

@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mRectCount; i++) { mRandom = Math.random(); float currentHeight = (float) (mRectHeight * mRandom); canvas.drawRect( (float) (mWidth * 0.4 / 2 + mRectWidth * i + offsets), currentHeight, (float) (mWidth * 0.4 / 2 + mRectWidth * (i + 1)), mRectHeight, mPaint); } }

这个时候,一个音乐播放器的示波器已经完成了,但是,这个是静态的,接下来,向外面暴露一个方法,用于刷新View,实现动态的效果。

public void onStart() {
        postInvalidateDelayed(300);
    }

每间隔300ms对View进行重绘,就可以有一个比较好的视觉效果了。

好了,最后我贴上全部的代码:

public class MusicLine extends View { private Paint mPaint; private float mWidth; private float mRectWidth; private float mRectHeight; private float mRectCount = 10; private int offsets = 2; private LinearGradient mLinearGradient; private double mRandom; public MusicLine(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public MusicLine(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public MusicLine(Context context) { super(context); initView(); } /** * 初始化工具类 */ private void initView() { mPaint = new Paint(); mPaint.setAntiAlias(true); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth * 0.6 / mRectCount); mLinearGradient = new LinearGradient(0, 0, mRectWidth, mRectHeight, Color.YELLOW, Color.BLUE, Shader.TileMode.CLAMP); mPaint.setShader(mLinearGradient); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < mRectCount; i++) { mRandom = Math.random(); float currentHeight = (float) (mRectHeight * mRandom); canvas.drawRect( (float) (mWidth * 0.4 / 2 + mRectWidth * i + offsets), currentHeight, (float) (mWidth * 0.4 / 2 + mRectWidth * (i + 1)), mRectHeight, mPaint); } } public void onStart() { postInvalidateDelayed(300); } }

至此,全部完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-11-01 14:01:02

Android绘制音乐播放器示波器的相关文章

Android绘制音乐播放器示波器_Android

示波器是在大学的时候老师教的,但是出来工作一直没有用到过,渐渐的也就忘记了,现在重新学习一下.来看看效果图: 这里是一个自定义的柱状图,然后有一个按钮,点击按钮的时候,这里柱子会不停的运动,类似于音乐播放器里示波器的跳动. 跟前面几个自定义view的方式类似,重写了onSizeChange()方法和onDraw()方法 先列一下我们要用到的变量: /**画笔*/ private Paint mPaint; /**控件的宽度*/ private float mWidth; /**单个柱子的宽度*/

Android自定义View之绘制音乐播放器示波器

周末玩的有点嗨,没更新博客了,今天补上,这个示波器是在大学的时候老师教的,但是出来工作一直没有用到过,渐渐的也就忘记了,现在重新学习一下.来看看效果图: 这里是一个自定义的柱状图,然后有一个按钮,点击按钮的时候,这里柱子会不停的运动,类似于音乐播放器里示波器的跳动. 跟前面几个自定义view的方式类似,重写了onSizeChange()方法和onDraw()方法  先列一下我们要用到的变量 Paint mPaint; mWidth; mRectWidth; mRectHeight; mRectC

android音乐播放器-Android关于音乐播放器频谱可视化图形的问题,急!

问题描述 Android关于音乐播放器频谱可视化图形的问题,急! 如上图,底部频谱可视化图形不会动了,不知道是什么原因造成的.首先我说下我目前知道的可能造成这种情况的事情.因为我的这个播放器里的播放列表这一项,要同步android系统媒体库里的播放列表.也就是说在系统的播放器中的播放列表会出现在我的播放器的播放列表中.本来我的包名是这样的:com.music.musicmenu 这样就不会出现上述问题,当我把包名改成系统的com.android.music 这时就会出现上述问题.也就是频谱不会动

jamendo_android 一个开源的Android在线音乐播放器实例

一个开源的Android在线音乐播放器实例.整套源码主要实现了专辑浏览,音乐在线播放,下载等等.虽说看起来功能不多,但是绝对十分具有参考价值,考虑的十分严谨.因为里面应用了网络通讯,json解析,全局mediaservice,自定义View组件,自定义 Adapter,application全局缓存,变量等等,所有要在项目中考虑到的优化问题. 项目主页:http://www.open-open.com/lib/view/home/1344734233116

android做音乐播放器,为什么都用aidl呢,bindservice不也可以么?

问题描述 android做音乐播放器,为什么都用aidl呢,bindservice不也可以么? android做音乐播放器,为什么都用aidl呢,bindservice不也可以么? 解决方案 bindservice是与activity绑定的.如果acitivity退出的话,service也就销毁了,无法后台播放.当然,可以用startservice

android虚拟机-android开发 音乐播放器 把歌曲添加到我的最爱列表

问题描述 android开发 音乐播放器 把歌曲添加到我的最爱列表 歌曲在数据库,能播放 , ,不知道怎样把它添加到我的最爱列表里 , ,求代码说明 解决方案 1.首先要知道你那个列表是什么控件 2.把歌曲信息add进去 3.设置点击事件,若点击对应歌曲则将歌曲路径传入播放器

插件-关于Android源生音乐播放器

问题描述 关于Android源生音乐播放器 求一个将demo播放器与系统播放器关联起来的思路(demo播放的时候 一个onclick可以跳转到 系统播放器并且同步播放 类似于音乐播放器插件) 解决方案 如果你说的同步播放是指:启动系统播放器播放一首歌的话.那么应该是不行的,我的理解是你需要操作第三方的代码,你需要它的操作文档才行啊,没有怎么去操作别人家的东西呢??

android 音乐播放器-android开发音乐播放器

问题描述 android开发音乐播放器 android开发音乐播放器怎么把歌曲放到项目中,一起打包到apk中??? 解决方案 一般多媒体文件都是放在raw目录下的,但音乐播放器的话,不建议把歌曲打包到apk中,可以把歌曲放在SD卡中,通过扫描sd卡的方式获取歌曲 解决方案二: 音乐播放器中综合了以下内容: SeekBar.ListView.广播接收者(以代码的形式注册Receiver).系统服务.MediaPlayer 实现的功能: 1.暂停/播放.下一首/上一首,点击某一首时播放 2.支持拖动

Android仿音乐播放器功能

本文实例为大家分享了Android仿音乐播放器功能的具体代码,供大家参考,具体内容如下 读取本地音乐文件 源代码: import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.