先上图

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实现简单的火焰效果相关推荐

  1. ali arthas 火焰图_使用arthas 生成火焰图分析jvm

    arthas 是阿里巴巴开源的强大的jvm 应该分析工具,以下是使用arthas 生成jvm 火焰图的一个学习 项目使用docker-compose 运行,对于生成的火焰图使用nginx 提供一个访问 ...

  2. mysql火焰图_【性能】如何使用perf和火焰图分析系统性能?

    一.实验环境 二.实验案例分析 安装完成后,我们先在第一个终端,执行下面的命令运行案例,也就是一个最基本的 Nginx 应用: 运行 Nginx 服务并对外开放 80 端口 # docker run ...

  3. python生成分析图_Pyflame 生成火焰图分析 Python 程序

    Pyflame 生成火焰图分析 Python 程序 后台回复[入门资料] 送你十本Python电子书 文 | EarlGrey 推荐 | 编程派公众号 微信号:codingpy Pyflame 是 U ...

  4. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  5. Android实现mp3分析,Android编程实现播放MP3功能示例

    本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...

  6. 火焰图分析Flink反压

    文章目录 现象 分析 猜想1 猜想2 猜想3 猜想4,确认代码变化 思考 大招(火焰图) On-cpu off-cpu 图 分析 火焰图 火焰图示例代码 生成火焰图 如何看 回到最开始的问题 总结 现 ...

  7. perf + 火焰图分析程序性能

    From: https://www.cnblogs.com/happyliu/p/6142929.html 1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便 ...

  8. CentOS 7 Linux实时内核下的epoll性能分析后续 | 火焰图分析

    在<CentOS 7 Linux实时内核下的epoll性能分析>从源码角度分析了epoll在实时内核和非实时内核之间的差异,为了更好的展示问题所在,这里给出epoll和select在实时内 ...

  9. java 性能调优,使用 async-profiler + FlameGraph火焰图 分析cup消耗热点代码

    参考文章 https://www.jianshu.com/p/9364028cca4e 目的:通过分析工具找到项目中占用cpu时间最长的代码片段,优化热点代码,达到优化内存的效果. 1.准备工具,从g ...

最新文章

  1. 下载python的步骤ios_下载及安装Python详细步骤
  2. 三层交换机解决不同VLAN间的通信—Vecloud微云
  3. Cookie 和 Session的区别 1
  4. mysql_sed_使用sed提取mysql备份的一行部分
  5. 函数实现不放在头文件的原因,及何时可以放头文件的情况【转】
  6. QThread与QWidget使用
  7. vc显示jpg,gif图像简单方法
  8. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 路由 IngressRoute【traefik2.X】
  9. 以字型为例,一维表示的二维数组矩阵,旋转90、-90
  10. 190323每日一句
  11. 工程线性代数 matlab版,工程线性代数(MATLAB版)
  12. 【图解】ERP系统如何操作?具体步骤是什么?
  13. Windows 10 C盘大瘦身
  14. 基于Java+Springboot+vue体育用品销售商城平台设计和实现
  15. Web服务器之搭建python自带静态Web服务器
  16. jQuery-放大镜
  17. Python智力问答小游戏
  18. 完全依赖XP必将自食其果
  19. emacs下安装eaf
  20. 在华为13年的峥嵘岁月后,我加入了一个13人的初创团队

热门文章

  1. CC00290.CloudKubernetes——|KuberNetes运维.V12|——|EFLK架构.v07|验证日志输出采集是否正常|
  2. android 陀螺仪简单使用,判读手机是否静止状态
  3. 地理坐标系、投影坐标系详解
  4. 2021下半年系统集成项目管理师客观题参考答题解析(3)
  5. soj2198: Highways_最小生成树Prim
  6. 搞“两弹一星”也离不开计算尺
  7. proteus三输入与非门名字_Proteus所有元件名称
  8. PX4使用手册-自主避障-ObstacleAvoidance
  9. matlab能做什么设计,Matlab GUI是什么(设计实例)
  10. 人在四合院:我变成了何雨柱(二)