《Android 群英传》读书笔记:自定义 View -- 音频条形图

本文是《Android群英传》读书笔记,详细介绍了如何自定义View来绘制并实现动态的音频条形图。通过分析最终效果图,创建VolumeView,设置渐变效果,以及使用Handler实现动画,使条形图每隔0.3秒更新一次,达到动态效果。
摘要由CSDN通过智能技术生成

转载请注明出处: http://blog.csdn.net/like_program/article/details/53352899

最终效果图

我们先看下最终效果图:

最终效果图

分析

通过上面的效果图,我们可以分析出:音频条形图,是由一个个矩形组成的,每个矩形的宽度相同,高度不同。每个矩形之间的距离相同。知道了这些,也就好办了。

绘制音频条形图

打开 Android Studio,新建 VolumeViewTest 项目。

新建 VolumeView.java ,继承自 View,代码如下:

package com.example.volumeviewtest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * 自定义 View 音频条形图
 */
public class VolumeView extends View {
   

    /**
     * 屏幕宽度
     */
    private int mScreenWidth;

    /**
     * 屏幕的高度
     */
    private int mScreenHeight;

    /**
     * mRectWidth 实际上是相邻矩形左边缘的距离
     * 但是把它当作每个矩形的宽度,后面会好理解一些
     */
    private int mRectWidth;

    /**
     * 绘制矩形的画笔
     */
    private Paint mPaint;

    /**
     * 矩形的数量
     */
    private int mRectCount = 12;

    /**
     * 第一个矩形右边缘和第二个矩形左边缘之间的距离
     */
    private int offset = 5;

    /**
     * 随机数
     */
    private double mRandom;

    public VolumeView(Context context) {
        super(context);
    }

    public VolumeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public VolumeView(Context context, AttributeSet attrs,
                      int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        // 创建绘制矩形的画笔
        mPaint = new Paint();
        // 蓝色
        mPaint.setColor(Color.BLUE);
    }

    /**
     * 系统计算出控件的大小后,就会回调此方法
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        // 获取屏幕宽度
        mScreenWidth = w;
        // 获取屏幕高度
        mScreenHeight = h;
        // 每个矩形的宽度
        mRectWidth = (int) (mScreenWidth * 0.6 / mRectCount);
    }

    @Override
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值