android火焰图分析,android实现简单的火焰效果
先上图
xz1.gif
xz2.gif
其实比较简单,其实就是canvas绘制图形,步骤就不赘述了,直接上代码
public class Particle {
//火焰粒子坐标
private float x;
private float y;
public float xv = 1;//x轴加速度
public float yv = 1;//y轴加速度
public int alpha;
public Particle(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
//500-200为火焰的y轴左边范围,所以根据这个计算透明度
alpha = (int) ((y-200)*255/300);
}
}
粒子系统类
public class ParticleSystem {
private List particles = new ArrayList<>();
private int border_width = 20;
private Paint paint = new Paint();
private Random random;
public ParticleSystem(int particlesCount) {
paint.setColor(Color.RED);
random = new Random();
for (int i = 0; i < particlesCount; i++) {
Particle particle = new Particle(100 + 100 * random.nextFloat(), 500);
particle.xv = 0.5f - 1 * random.nextFloat();
particles.add(particle);
}
}
public void onDraw(Canvas canvas) {
for (int i = 0; i < particles.size(); i++) {
Particle particle = particles.get(i);
paint.setAlpha(particle.alpha);
canvas.drawRect(particle.getX(), particle.getY(), particle.getX() + border_width, particle.getY() + border_width, paint);
}
}
/**
* 粒子集合更新方法
*
* @param wind wind是风,0时代表无风,粒子不偏移
*/
public void update(float wind) {
for (int i = 0; i < particles.size(); i++) {
Particle particle = particles.get(i);
if (particle.xv > 0) {
//当初始加速度为正,就一直为正
particle.xv += 0.01f + wind;
} else {
//当初始加速度为负,就一直为正
particle.xv += -0.01f + wind;
}
particle.yv = particle.yv + 0.1f;
particle.setX(particle.getX() + particle.xv);
particle.setY(particle.getY() - particle.yv);
}
List list = new ArrayList<>();
list.addAll(particles);
for (Particle particle : list) {
if (particle.getY() < 200) {
particles.remove(particle);
}
}
for (int i = 0; i < 5; i++) {
Particle particle = new Particle(100 + 100 * random.nextFloat(), 500);
particle.xv = 0.5f - 1 * random.nextFloat();
particles.add(particle);
}
}
}
public class MyView extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder holder;
private MyThread thread;
public boolean running = true;
private ParticleSystem particleSystem;
private Paint paint;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
holder = getHolder();
holder.addCallback(this);
thread = new MyThread();
particleSystem = new ParticleSystem(50);
paint = new Paint();
paint.setColor(Color.BLACK);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
running = true;
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
running = false;
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
while(true){
if(running){
drawUI();
}
}
}
}
private void drawUI(){
Canvas canvas = holder.lockCanvas();
if(canvas==null){
return;
}
canvas.drawRect(0,0,getWidth(),getHeight(),paint);
particleSystem.onDraw(canvas);
particleSystem.update(new Random().nextFloat()*0.18f);
holder.unlockCanvasAndPost(canvas);
}
}
android火焰图分析,android实现简单的火焰效果相关推荐
- ali arthas 火焰图_使用arthas 生成火焰图分析jvm
arthas 是阿里巴巴开源的强大的jvm 应该分析工具,以下是使用arthas 生成jvm 火焰图的一个学习 项目使用docker-compose 运行,对于生成的火焰图使用nginx 提供一个访问 ...
- mysql火焰图_【性能】如何使用perf和火焰图分析系统性能?
一.实验环境 二.实验案例分析 安装完成后,我们先在第一个终端,执行下面的命令运行案例,也就是一个最基本的 Nginx 应用: 运行 Nginx 服务并对外开放 80 端口 # docker run ...
- python生成分析图_Pyflame 生成火焰图分析 Python 程序
Pyflame 生成火焰图分析 Python 程序 后台回复[入门资料] 送你十本Python电子书 文 | EarlGrey 推荐 | 编程派公众号 微信号:codingpy Pyflame 是 U ...
- android内存占用分析,Android App性能评测分析-内存篇
1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...
- Android实现mp3分析,Android编程实现播放MP3功能示例
本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...
- 火焰图分析Flink反压
文章目录 现象 分析 猜想1 猜想2 猜想3 猜想4,确认代码变化 思考 大招(火焰图) On-cpu off-cpu 图 分析 火焰图 火焰图示例代码 生成火焰图 如何看 回到最开始的问题 总结 现 ...
- perf + 火焰图分析程序性能
From: https://www.cnblogs.com/happyliu/p/6142929.html 1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便 ...
- CentOS 7 Linux实时内核下的epoll性能分析后续 | 火焰图分析
在<CentOS 7 Linux实时内核下的epoll性能分析>从源码角度分析了epoll在实时内核和非实时内核之间的差异,为了更好的展示问题所在,这里给出epoll和select在实时内 ...
- java 性能调优,使用 async-profiler + FlameGraph火焰图 分析cup消耗热点代码
参考文章 https://www.jianshu.com/p/9364028cca4e 目的:通过分析工具找到项目中占用cpu时间最长的代码片段,优化热点代码,达到优化内存的效果. 1.准备工具,从g ...
最新文章
- 下载python的步骤ios_下载及安装Python详细步骤
- 三层交换机解决不同VLAN间的通信—Vecloud微云
- Cookie 和 Session的区别 1
- mysql_sed_使用sed提取mysql备份的一行部分
- 函数实现不放在头文件的原因,及何时可以放头文件的情况【转】
- QThread与QWidget使用
- vc显示jpg,gif图像简单方法
- Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 路由 IngressRoute【traefik2.X】
- 以字型为例,一维表示的二维数组矩阵,旋转90、-90
- 190323每日一句
- 工程线性代数 matlab版,工程线性代数(MATLAB版)
- 【图解】ERP系统如何操作?具体步骤是什么?
- Windows 10 C盘大瘦身
- 基于Java+Springboot+vue体育用品销售商城平台设计和实现
- Web服务器之搭建python自带静态Web服务器
- jQuery-放大镜
- Python智力问答小游戏
- 完全依赖XP必将自食其果
- emacs下安装eaf
- 在华为13年的峥嵘岁月后,我加入了一个13人的初创团队
热门文章
- CC00290.CloudKubernetes——|KuberNetes运维.V12|——|EFLK架构.v07|验证日志输出采集是否正常|
- android 陀螺仪简单使用,判读手机是否静止状态
- 地理坐标系、投影坐标系详解
- 2021下半年系统集成项目管理师客观题参考答题解析(3)
- soj2198: Highways_最小生成树Prim
- 搞“两弹一星”也离不开计算尺
- proteus三输入与非门名字_Proteus所有元件名称
- PX4使用手册-自主避障-ObstacleAvoidance
- matlab能做什么设计,Matlab GUI是什么(设计实例)
- 人在四合院:我变成了何雨柱(二)