android 音乐柱状图动画,android 音乐播放柱形图
android 音乐播放柱形图
直接上思路:
1: 先测量onMeasure 测量view的大小
2:绘制具体的柱形图onDraw;
其实我们的view可以wrap_content和固定值,如果是固定值就不用onMeasure了(仅限该需求下),但是如果是wrap_content的话 我们就需要重新测量大小了,因为我们需要用到wight和height。
wight = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
如果你感觉没思路的话,你也可以这个这样
实现步骤:
1:先做一个view 然后里面就画几个柱形图(静态的,到此成功了一半了!)
2:然后为什么会是动态的呢 ? 我们就会想到了利用开启一个线程,每次产生随机数randomNumber,然后根据随机数计算出柱形图的高height,最后刷新view。完了,就这。
这个view的模型如上图所示。
根据上图,我们可以知道:柱形图的数量比间隔数多一个。
我们要先测量获取wight 和 height
wight = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
然后我们看下变量
private float columnEarchWight ;//每一个柱子的宽度
private float difference;//每两个柱子之间的间隔
private int columnSize = 6;//总多少个柱子(默认是6个)
columnEarchWight = (float)(wight * 0.8/columnSize);
difference = (float)(wight * 0.2 / (columnSize - 1));
之所以0.8和0.2 的意思是:我们要所有的柱形图站宽度的0.8,间隔的宽度占总宽度的0.2;,然后再计算出每一个柱子的宽度和每一个间隔的宽度;
然后我们随机产生columnSize个整数
randomList.clear();
for(int i = 0;i < columnSize;i++){
//这是height分为columnSize - 1,然后随即产生 占几部分
nextInt = random.nextInt(columnSize - 1);
randomList.add(nextInt);
}
这些整数是每一个柱形图的高度所占height的比例(一个height共分为了columnSize - 1部分,然后nextInt 是占了几部分)
然后就是画图了
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
for(int i = 0;i < columnSize;i++){
RectF rectF1 =
new RectF(difference * i + columnEarchWight * i,
height * randomList.get(i)/(columnSize - 1),
(difference * i + columnEarchWight * (i + 1)),
height);
canvas.drawRect(rectF1,paint);
}
里面的for循环,对比上图,仔细琢磨一下。difference 是间隔,columnEarchWight 是宽度,
然后在写一个handler 每次都产生不同的随机数,然后刷新view。
完了 就这。
附上整体代码
package com.app.test.musicproject;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by liumengqiang on 2017/5/5.
*/
public class MusicView extends View {
public MusicView(Context context) {
super(context);
}
public MusicView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MusicView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private float height;
private float wight;
private List randomList = new ArrayList<>();
private Random random = new Random();//随机产生的数(柱子的高度)
private float columnEarchWight ;//每一个柱子的宽度
private float difference;//每两个柱子之间的间隔
private int columnSize = 6;//总多少个柱子(默认是6个)
public int getColumnSize() {
return columnSize;
}
public void setColumnSize(int columnSize) {
this.columnSize = columnSize;
columnEarchWight = (float)(wight * 0.8/columnSize);//所有柱子所占的宽度
difference = (float)(wight * 0.2 / (columnSize - 1));//所有柱子间隔宽度和
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
wight = View.MeasureSpec.getSize(widthMeasureSpec);
height = View.MeasureSpec.getSize(heightMeasureSpec);
columnEarchWight = (float)(wight * 0.8/columnSize);
difference = (float)(wight * 0.2 / (columnSize - 1));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
for(int i = 0;i < columnSize;i++){
RectF rectF1 =
new RectF(difference * i + columnEarchWight * i,
height * randomList.get(i)/(columnSize - 1),
(difference * i + columnEarchWight * (i + 1)),
height);
canvas.drawRect(rectF1,paint);
}
}
public void runView(){
new Thread(){
@Override
public void run() {
super.run();
try {
while(true){
sleep(100);
handler.sendEmptyMessage(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
int nextInt;
switch (what){
case 1:{
randomList.clear();
for(int i = 0;i < columnSize;i++){
nextInt = random.nextInt(columnSize - 1);//这是height分为columnSize - 1,然后随即产生 占几部分
randomList.add(nextInt);
}
invalidate();
break;
}
}
}
};
}
android 音乐柱状图动画,android 音乐播放柱形图相关推荐
- android svg路径动画,Android和播放SVG动画
把你的SVG图像,并将其转换为VectorDrawable here 您下载的XML文件添加到您的项目,看看它的外观.这里有一个VectorDrawable的一个例子的旋转和路径变形动画准备: and ...
- android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画
android实现旋转.平移.缩放和透明度渐变的补间动画,具体实现如下: 1.在新建项目的res目录中,创建一个名为anim的目录,并在该目录中创建实现旋转.平移.缩放和透明度渐变的动画资源文件. 透 ...
- android覆盖扩散动画,[Android]多层波纹扩散动画——自定义View绘制
之前整理过一些属性动画的基本操作,这一段时间的动画相关需求都安然度过了.直到这次-- 一.另一种动画需求 多数交互中的动画都是让单个页面元素动起来,这种就很适合用属性动画实现.但是对于 多个元素.非页 ...
- android 自定义帧动画,Android 自定义方式实现帧动画效果
前言 首先说下为啥要通过自定义处理的方式去实现Android的帧动画效果,因为通过系统原生支持的xml和java代码这两种方式实现,在播放的图片量很多时,会出现内存溢出,此现象也是在做项目当中有遇到, ...
- android局部翻转动画,android 围绕中心旋转动画
本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...
- android studio实现动画,android studio上的基本动画实现(第一篇)
hello,各位小伙伴们,在不少小伙伴们刚刚开始学习android的时候,经常会有一些project里面须要有一些基本动画的插入,那么具体是要怎么实现呢?咱们接下一块儿分析一下在android中的几种 ...
- android 实现冒泡动画,android 触摸事件冒泡动画效果
原图魔法效果:(透明的有些看不清) PS之后加了背景色并放大后的效果 在屏幕中的效果(左上很小的那个,其他都是背景图): 中间很小的那个就是 先看动画实现代码explosion.xml(explosi ...
- android 创建帧动画,Android 逐帧动画创建实例详解
Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 ...
- android dialog 消失动画,android 自定义dialog弹出和消失缩放动画
本文转自:android 自定义dialog,窗口动画 Java代码: package com.sunxu.org.IndividualityDialog; import Android.app.Ac ...
- android 撒花动画,Android仿QQ聊天撒花特效 很真实
先看看效果图吧 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?先在这里打个问号 下面就直接写了 1.activity_main.xml xmlns:tools="http://sche ...
最新文章
- I/O模型之一:Unix的五种I/O模型
- McAfee ENS
- python调用电脑蜂鸣器一直响_电脑开机蜂鸣器一直响,9声滴~,什么问题?怎么处理?...
- Java Bean Validation 最佳实践
- SVN trunk branch tags 区别
- java求最后一位不为0的数字_【Java】 剑指offer(62) 圆圈中最后剩下的数字
- [0002] Hadoop HDFS cmd常用命令练手
- Element穿梭框Transfer与进度条组件绑定
- css中绝对定位和浮动的异同
- 近期流行手机病毒“手机骷髅”解决方案
- shell: 脚本获取ssh 端口号
- 传智播客黑马java 30期_黑马传智播客JavaEE57期 2019最新基础+就业+在职加薪_汇总...
- 程序员眼中的中国传统文化-王阳明《传习录》21
- WIN7,WIN10,WIN11怎么查看电脑操作系统位数
- HiCar目前支持的手机型号
- 2个鸡蛋,100层楼问题
- 一元运算符 + 表示正号 - 表示负号
- 【Android】Logcat使用
- 4000字干货长文!从校招和社招的角度说说如何准备大厂面试?
- 如何通过python自动化薅短视频APP羊毛
热门文章
- c 获取本地计算机ip,C++如何获取本机的IP地址
- Firefox火狐浏览器关闭更新提示
- GitHub · 如何创建文件夹
- python制作流动图_炫酷!用Python制作漂亮的流动桑基图
- html360全景图原理,通过HTML5 Canvas实现360度全景图
- 一点计算机电脑就闪,电脑启动有点闪烁是怎么回事
- 苹果换原装电池_手机资讯:iPhone 电池最大容量低于 80%换电池选原装还是第三方...
- 4000元组装电脑配置清单2021 4000元台式电脑组装配置单
- Win10防火墙放行MySQL3306端口
- 从网页浏览器跳转到微信打开公众号关注界面的解决方案