示波器是在大学的时候老师教的,但是出来工作一直没有用到过,渐渐的也就忘记了,现在重新学习一下。来看看效果图:
这里是一个自定义的柱状图,然后有一个按钮,点击按钮的时候,这里柱子会不停的运动,类似于音乐播放器里示波器的跳动。
跟前面几个自定义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绘制音乐播放器示波器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)