Android音律灯编写

2024-01-17 00:40
文章标签 android 编写 音律

本文主要是介绍Android音律灯编写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

很久之前写的代码了,现在贴出来,以便记忆

详细思路:就是使用两个for循环,然后计算出间隔,下面的格子是上面的倒影,所以计算出来上面格子的初始位置之后,再 加上计算出相对应下边格子的高度,就可以画出来就好了。下面的注意加上透明度

public class MusicView extends View {

 

private Paint imgPaint;

 

//测量控件的宽度

private int width;

//测量控件的高度

private int height;

 

//计算每一格的大小

private int perHeight,perWidth;

 

//上边的透明度

private int shTouming=99;

//下边的透明度

private int xiaTouming=33;

 

 

 

 

public MusicView(Context context) {

super(context);

init();

}

 

public MusicView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init();

}

 

public MusicView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

 

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

 

int specMode=MeasureSpec.getMode(widthMeasureSpec);

int specSize=MeasureSpec.getSize(widthMeasureSpec);

 

 

 

 

width=specSize;

height=width/2;

perHeight=(height-dp2px(2))/24;

perWidth=(width-10*dp2px(10)-2*dp2px(30))/11;

setMeasuredDimension(width,height);

}

 

private void init() {

imgPaint=new Paint();

imgPaint.setAntiAlias(true);

}

 

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

drawMusic(canvas);

}

 

private void drawMusic(Canvas canvas) {

for (int i = 0; i < 11; i++) {

canvas.save();

if (i>0){

canvas.translate(dp2px(30)+perWidth*i+dp2px(10)*i,height/2);

}else {

//第一列不需要间隔

canvas.translate(dp2px(30)+perWidth*i,height/2);

}

 

for (int j = 0; j <(int)(2+10*Math.random()); j++) {

if (j>0){

canvas.translate(0,-perHeight-dp2px(2));

}else {

//第一排不需要间隔

canvas.translate(0,-perHeight);

}

 

switch (j){

case 0:{

imgPaint.setColor(Color.parseColor("#"+shTouming+"FF0000"));

break;

}

case 1:{

imgPaint.setColor(Color.parseColor("#"+shTouming+"FF2600"));

break;

}

case 2:{

imgPaint.setColor(Color.parseColor("#"+shTouming+"FF5100"));

break;

}

case 3:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-20)+"FF6F00"));

break;

}

case 4:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-25)+"FF9900"));

break;

}

case 5:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-30)+"FFB700"));

break;

}

case 6:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-35)+"FFC800"));

break;

}

case 7:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-40)+"FFF200"));

break;

}

case 8:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-45)+"EEFF00"));

break;

}

case 9:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-80)+"EEFF00"));

break;

}

case 10:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-85)+"EEFF00"));

break;

}

case 11:{

imgPaint.setColor(Color.parseColor("#"+(shTouming-88)+"EEFF00"));

break;

}

}

canvas.drawRect(0,0,perWidth,perHeight,imgPaint);

 

//倒影的编写

if (j==0){

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FF0000"));

canvas.drawRect(0,perHeight,perWidth,perHeight*2,imgPaint);

} else {

switch (j){

case 1:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FF2600"));

break;

}

case 2:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FF5100"));

break;

}

case 3:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FF6F00"));

break;

}

case 4:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FF9900"));

break;

}

case 5:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FFB700"));

break;

}

case 6:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FFC800"));

break;

}

case 7:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"FFF200"));

break;

}

case 8:{

imgPaint.setColor(Color.parseColor("#"+xiaTouming+"EEFF00"));

break;

}

case 9:{

imgPaint.setColor(Color.parseColor("#22EEFF00"));

break;

}

case 10:{

imgPaint.setColor(Color.parseColor("#11EEFF00"));

break;

}

case 11:{

imgPaint.setColor(Color.parseColor("#05EEFF00"));

break;

}

}

 

canvas.drawRect(0,2*j*(perHeight+dp2px(2))+perHeight,perWidth,2*j*(perHeight+dp2px(2))+2*perHeight,imgPaint);

}

 

}

canvas.restore();

}

}

 

 

 

private int sp2px(float sp) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,sp,getResources().getDisplayMetrics());

}

 

private int dp2px(float dp) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,dp,getResources().getDisplayMetrics());

}

 

public void startMusic(){

invalidate();

}

 

}

这篇关于Android音律灯编写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614436

相关文章

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja