文档章节

Android进阶学习-使用Canvas自定义音乐条形(5)

August1996_
 August1996_
发布于 2016/05/08 10:24
字数 292
阅读 17
收藏 0

效果图

    1.这次就不使用attrs.xml文件了,属性都在代码写死了

    2.代码:

package com.example.customview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.view.View;
public class MusicStroke extends View {
    
    private Paint            mPaint;
    private LinearGradient    mLinearGradient;
    private int                mNumber;
    private float            mWidth;
                            
    public MusicStroke(Context context) {
        this(context, null);
    }
    
    public MusicStroke(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    
    public MusicStroke(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        canvas.drawColor(Color.WHITE);
        for (int i = 0; i < mNumber; i++) {
            canvas.drawRect(i * mWidth, (float) (Math.random() * getMeasuredHeight() * 1f), (i + 1) * mWidth,
                    getMeasuredHeight(), mPaint);
            /**
             * 画mNumber个矩形,模拟音乐数据变化的随机效果
             */
        }
        postInvalidateDelayed((long) (Math.random() * 300));
        /**
         * 重复调用onDraw方法,间隔为0-300毫秒
         */
    }
    
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (mWidth == 0) {
            mNumber = 30;
            mPaint = new Paint();
            
            mLinearGradient = new LinearGradient(0, 0, 0, getMeasuredHeight(),
                    new int[] { Color.parseColor("#ffbb33"), Color.RED, Color.parseColor("#ffbb33") }, null,
                    TileMode.CLAMP);
            mPaint.setShader(mLinearGradient);
            /**
             * 为矩形设置颜色渐变效果
             */
            
            mWidth = getMeasuredWidth() / mNumber;
            /**
             * mWidth是每个矩形的高度
             */
        }
    }
    
}

    3.模型图:

    4.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.example.customview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >
    <com.example.customview.MusicStroke
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

 

© 著作权归作者所有

August1996_
粉丝 2
博文 51
码字总数 29055
作品 0
湛江
程序员
私信 提问
android获取和展示音乐的频谱

还有一些帖子: https://blog.csdn.net/Qzhongwenze/article/details/52851297 http://blog.sina.com.cn/s/blog_67d95f40010113ec.html https://blog.csdn.net/caryee89/article/details/693......

whoisliang
2018/11/15
285
0
android蓝牙手柄、仿QQ看房、仿慕课网、数据库二维码框架等源码

Android精选源码 可自定义图片指示器并支持自定义Tab宽度的TabLayout源码(http://www.apkbus.com/thread-599243-1-1.html) android蓝牙控制手柄操作源码(http://www.apkbus.com/thread-59928...

逆鳞龙
2018/05/15
26
0
Android学习进阶路线导航线路(Android源码分享)

前言:公司最近来了很多应届实习生,看着他们充满信心但略带稚气的脸庞上,想到了去年的自己,那是的我是不是也和 现在的他们一样呢?现在的我又改变了什么?公司的给这些实习生指定的相关培...

程序袁_绪龙
2014/10/22
329
2
Android 手机本地音乐文件播放器 - Musicoco

简介 Musicoco,Android 手机本地音乐文件播放器,应用在单独的服务进程中控制音乐播放,目前以实现功能如下:通过耳机和通知栏快捷控制音乐播放、创建歌单、本地歌曲搜索、记忆播放、自动切...

Duan_Jia_Ning
2018/12/20
1K
0
Android知识图谱:我们到底需要学习哪些Android知识?

前言 如果你也学习Android,那么你大概率会看过我的文章。经常有读者给我留言:“该怎么学习Android?”、“日常学习Android的方法是什么”。 所以,今天,我将献上一份《Android知识图谱》,...

Carson_Ho
04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
53分钟前
5
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
10
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
15
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
3.3K
25

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部