自定义View之音频条形图
来源:互联网 发布:java游戏服务器端 编辑:程序博客网 时间:2024/05/16 16:12
首先自定义view要重写onMeasure方法,在此之前,自定义了一个方法measureWidthAndHeight,代码很简单,也很容易明白
private int measureWidthAndHeight(int inputMeasureSpec){ int result = 0; int mode = MeasureSpec.getMode(inputMeasureSpec); int size = MeasureSpec.getSize(inputMeasureSpec); if (mode == MeasureSpec.EXACTLY){ result = size; }else { result = 200; if (mode == MeasureSpec.AT_MOST){ result = Math.min(result,size); } } return result; }
然后onMeasure调用上述方法方法:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = measureWidthAndHeight(widthMeasureSpec); int height = measureWidthAndHeight(heightMeasureSpec); setMeasuredDimension(width,height); }
通过onMeasure设置view的高度和宽度后,使用onSizeChanged方法,实例化画笔所需要的参数:
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mPaint = new Paint(); mPaint.setStyle(Paint.Style.FILL); mRectCount = 40; //设置条形图个数 mWidth = getWidth(); mRectHeight = getHeight(); mRectWidth = (int) (mWidth*0.9/mRectCount);//设置每个条形图宽度 offset = (int) (mWidth*0.1/mRectCount);//设置相邻两个条形图之间的间距 mLinearGradient = new LinearGradient(0,0,mRectWidth,mRectHeight,Color.YELLOW,Color.BLUE, Shader.TileMode.MIRROR); mPaint.setShader(mLinearGradient); }
这里简单说一下LinearGradient使用,如图
整个图类似于一个view,并通过LinearGradient的最后一个参数实现重复渐变,延伸渐变,镜像渐变等效果,但是需要通过Paint来设置并画出
最后实现onDraw方法:
@Override protected void onDraw(Canvas canvas) { for (int i = 0; i<mRectCount;i++){ super.onDraw(canvas); double random = Math.random(); float currentHeight = (float) (mRectHeight*random); /** * * 下面是画出每个图,当i=0时,第一个条形图开始的位置为mWidth*0.05+offset * 当i=mRectCount-1时,最后一个条形图结束的位置是mWidth*0.05+mWidth*0.9=mWidth*0.95 * 近似整个图在中心 * */ canvas.drawRect((float)(mWidth*0.05+mRectWidth*i+offset), currentHeight, (float)(mWidth*0.05+mRectWidth*(i+1)), mRectHeight, mPaint); } postInvalidateDelayed(300);//每隔3毫秒重新onDraw }
效果图如下所示:
阅读全文
0 0
- Android自定义View之音频条形图
- Android自定义View之音频条形图
- 自定义View之音频条形图
- 《Android 群英传》读书笔记:自定义 View -- 音频条形图
- 自定义View-条形图
- Android 自定义View 条形图
- 自定义动态的音频条形图
- 【Android】自定义View -- 条形图(柱状图)
- 自定义View之继承View(圆形进度图,播放器条形图)
- android 自定义view 之 动态音频图 (二)
- 渐变图形---音频条形图
- 【Android UI】音频条形图
- 自定义View实例(四)----自定义条形柱状图
- 自定义View之动态音频条
- 自定义View之音频播放圆形进度条
- 自定义控件(三)--弧线展示图与音频条形图
- android群英传笔记--第三章--自定义控件四音频条形图
- android之自定义view和ViewGroup(三)(代码篇,实现条形进度条)
- 【bzoj3450】Tyvj1952 Easy 期望dp
- Android中getDimension,getDimensionPixelOffset和getDimensionPixelSize 区别
- hdu1575(矩阵快速幂基础)
- 析构函数的一些特点
- caffe study(5) - AlexNet 之结构篇
- 自定义View之音频条形图
- caffe的Makefile.config解读
- L2-015. 互评成绩
- 学生总成绩
- Netty4详解三:Netty架构设计
- LittleThings
- 类和对象
- bzoj2324拯救皮卡丘
- 枚举---枚举的作用