Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android绘制音乐播放器示波器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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,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)),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,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),mPaint);
  }

 }

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

}

至此,全部完成了。

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

大佬总结

以上是大佬教程为你收集整理的Android绘制音乐播放器示波器全部内容,希望文章能够帮你解决Android绘制音乐播放器示波器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。