因为公司项目,需要做粒子动画的特效,找了很多资料,偶然间在github上发现了一个比较强大的粒子特效动画leonids,分享给大家。

Leonids是一个与标准Android UI配合使用的粒子系统库。该库非常轻巧,LeonidsLib.jar只有81Kb。

流星雨效果

爆炸效果

涟漪效果

飞花效果

首先我们把库引进来,方式非常简单,目前最新版本是1.3.2的

 compile 'com.plattysoft.leonids:LeonidsLib:1.3.2'
allprojects {repositories {jcenter()}
}

做完以上部分,这个强大的粒子动画库我们已经引入进来了

一:爆炸效果

首先我们做一个测试

    new ParticleSystem(mActivity, 1000, R.mipmap.flower0, 3000).setSpeedModuleAndAngleRange(0.05f, 0.2f, 0, 360).setRotationSpeed(30).setAcceleration(0, 90).oneShot(mButton1, 200);

在Activity非onCreate中,调用以上代码,我们就可以看到一个酷炫的爆炸效果

然后我解释下每个参数的含义

 new ParticleSystem(mActivity, 1000, R.mipmap.flower0, 3000)

第一个参数是上下文对象(context),第二个参数(最大粒子数目),第三个参数(粒子资源),第四个参数(粒子存留时间)

第二个参数的含义是指同时存在的最大粒子数目,第四个参数是指每个粒子的最长留存时间;

   .setSpeedModuleAndAngleRange(0.05f, 0.2f, 0, 360)

第一个,第二个参数,是一个速度区间,这个速度是粒子的发射速度(如果没有设定重力,那么粒子的速度是恒定的,如果设定了重力,粒子的速度会根据重力方向改变),粒子会在这个速度区间随机,每个粒子都是独立的

第三个,第四个参数,是指发射粒子的角度,0-360,的任意区间,这个参数的作用在于。我们操控发射粒子的方向,同样会在这个范围内随机

  .setRotationSpeed(30)

这个参数的含义是指,图片元素的自转,粒子元素自身的旋转速度

.setAcceleration(0, 90)

这个参数含义是指,重力加速度,第一个为重力加速度的值,第二个为重力加速度的方向,理论上讲我们这个设置任意方向为重力方向

 .oneShot(mButton1, 200);

见明知意,oneShot就是发射一次,第一个参数是发射的位置,第二个参数是发射的粒子数量

二:飞花效果

 new ParticleSystem(mActivity, 1000, R.mipmap.flower0, 10000).setSpeedModuleAndAngleRange(0.05f, 0.2f, 0, 90).setRotationSpeed(60).setAcceleration(0.00005f, 90).emit(0, -100, 30, 10000);

其他方法同上,唯一区别在于

.emit(0, -100, 30, 10000);

第一个参数,和第二个参数,是屏幕的像素坐标,粒子动画的发射点,

第三个参数是每秒发射多少粒子

第四个参数是持续发射多少秒

时间到了之后,粒子会自动停止发射

三:构造函数,和一些方法

 粒子系统通常用于游戏中,用途广泛:爆炸,火灾,烟雾等。这些效果也可以在普通应用程序中使用,以添加“多汁”或“俏皮设计”元素。正是因为它的主要用途是游戏,所有引擎都支持粒子系统,但对于标准的Android用户界面来说没有这样的东西。这意味着如果你正在构建一个Android应用程序,并且你想要一个粒子系统,那么你必须包含一个图形引擎并使用OpenGL--这太过于夸张了 - 或者你必须自己实现它。Leonids将填补这一空白,为使用标准Android UI的开发人员带来粒子系统。

所有构造函数都使用活动,粒子的最大数量和生存时间。区别在于如何指定粒子的图像。

受支持的绘图是:BitmapDrawable和AnimationDrawable。

ParticleSystem(Activity a,int maxParticles,int drawableRedId,long timeToLive)
ParticleSystem(Activity a,int maxParticles,Drawable drawable,long timeToLive)
ParticleSystem(Activity a,int maxParticles,位图位图,long timeToLive)
ParticleSystem(Activity a,int maxParticles,AnimationDrawable动画,long timeToLive)

还有一些构造函数可以接收视图ID作为父视图,因此您可以将粒子系统放置在背景上(或任何两个视图之间)

ParticleSystem(Activity a,int maxParticles,int drawableRedId,long timeToLive,int parentViewId)
ParticleSystem(Activity a,int maxParticles,Drawable drawable,long timeToLive,int parentViewId)
ParticleSystem(Activity a,int maxParticles,位图位图,long timeToLive,int parentViewId)
ParticleSystem(Activity a,int maxParticles,AnimationDrawable动画,long timeToLive,int parentViewId)

另一个构造函数接收父视图组和drawable,用于不适合将参考传递给Activity的地方

ParticleSystem(ViewGroup parentView,int maxParticles,Drawable drawable,long timeToLive)

在粒子系统上进行配置的可用方法有:

setSpeedRange(float speedMin,float speedMax):使用0-360作为角度范围
setSpeedModuleAndAngleRange(float speedMin,float speedMax,int minAngle,int maxAngle)
setSpeedByComponentsRange(float speedMinX,float speedMaxX,float speedMinY,float speedMaxY)
setInitialRotationRange(int minAngle,int maxAngle)
setScaleRange(float minScale,float maxScale)
setRotationSpeed(float rotationSpeed)
setRotationSpeedRange(float minRotationSpeed,float maxRotationSpeed)
setAcceleration(浮动加速度,浮动角度)
setFadeOut(long milisecondsBeforeEnd,Interpolator interpolator):使用插值器实现简单淡出效果的实用方法
setFadeOut(长期持续时间):简单淡出的实用方法

如果您想要使用已创建和移动的粒子,此方法使用已经创建好的粒子组

setStartTime(int time)

发射器

从发射器发射每秒的粒子数量。如果设置发射时间,那么发射器会在该时间后停止,否则它是连续的。

基本的发射器

  • 发射(View发射器,int particlesPerSecond)
  • 发射(View发射器,int particlesPerSecond,int发射时间)

基于(x,y)坐标发射

  • 发射(int emitterX,int emitterY,int particlesPerSecond)
  • emit(int emitterX,int emitterY,int particlesPerSecond,int emitingTime)

用重力发射

  • emitWithGravity(查看发射器,int引力,int particlesPerSecond)
  • emitWithGravity(查看发射器,int引力,int particlesPerSecond,int发射时间)

更新,停止和取消

  • updateEmitPoint(int emitterX,int emitterY)动态更新发射点。
  • updateEmitPoint(View emiter,int gravity)使用重力动态更新发射点。
  • stopEmitting()停止发射新的粒子,但活动的粒子被更新。
  • 取消()停止新粒子的发射,并将活动球粒排出。

每个粒子系统仅为粒子使用一个图像。如果你想要发射不同的粒子,你需要为它们中的每一个创建一个粒子系统。

每个粒子发射示例,只能发射一种粒子,如果我们要发射多种不同的粒子,就需要创建更多的发射示例

四:感想 

由于水平有限,并没有开发出此框架更高级的使用,但是从文档来看,功能不只我所描述的这些。

从理论上讲,此框架可以用来开发类似星轨等更加复杂的视图,抛砖引玉,如文中有错误的地方,请大家及时联系我,以免误导他人.文尾我会附上上面4种效果的源码,以供大家参考

github地址传送门

博文顶部四种效果的源码

https://download.csdn.net/download/mymolit/10290777

Android超强大的粒子动画库,流星雨,爆炸,满屏飞花,等粒子特效快速实现相关推荐

  1. Android之开源框架NineOldAndroids动画库

    1.介绍 Android3.0推出了全新的AnimationAPI,使用起来很方便,但是不能在3.0以下版本使用,NineOldAndroids是一个可以在任意Android版本上使用的Animati ...

  2. Android基础-Facebook Rebound 弹性动画库 源码分析

    Facebook Rebound 弹性动画库 源码分析 设计的时候老是闲动画太生硬,于是找到了这个弹性动画.这个弹性动画是facebook开源的,Rebound项目地址:https://github. ...

  3. android单个页面切换_MTransition是一个Android上的页面切换动画库

    English | 中文文档 MTransition MTransition is a page switching animation library on Android,it can make ...

  4. 动画库 Lottie 的使用

    本文主要介绍动画开源库 Lottie 在 Android 中的使用. 前言 在日常APP开发中,为了提升用户感官舒适度等原因,我们会在APP中加入适量动画. 而传统手写动画方式往往存在诸多问题: 动画 ...

  5. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

    原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...

  6. 2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特效

    2023年春节祝福第二弹 送你一只守护兔,让它温暖每一个你! [html5 css3]画一只会动的兔子 目录 一.送你一只守护兔,效果图 二.前言 三.代码解释及部分特效教程 (1).css3 立体字 ...

  7. 打造简易NineoldAndroids动画库,深入理解Android动画原理

    简介 NineoldAndroids是Github上一个著名的动画库,简单来说,NineOldAndroids是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画. 网上 ...

  8. Android 3D旋转动画库

    今天兴趣来潮,撸了一个动画特效,我把他应用在登录的界面,当然也可以用在其他地方,先来预览一下我的特效吧 使用方法 1. 在build.gradle里面配置如下 dependencies {compil ...

  9. android动画帧率_Android动画进阶—使用开源动画库nineoldandroids

    前言 Android系统支持原生动画,这为应用开发者开发绚丽的界面提供了极大的方便,有时候动画是很必要的,当你想做一个滑动的特效的时候,如果苦思冥想都搞不定,那么你可以考虑下动画,说不定动画轻易就搞定 ...

最新文章

  1. java 全局变量_Java语言与C语言、C++语言有何差异以及优劣势
  2. golang表单及验证支持
  3. 沫沫金:2014最新全浏览器兼容左列固定右列自适应宽度技巧大公开
  4. OpenGL stencil test模板测试的实例
  5. Codeforces Beta Round #19 D. Points
  6. python先序中序后序的非递归版本
  7. CIA的海外间谍,要如何完美避开AI的监控?
  8. 【推荐】DBA必须了解的11g中的一些变化
  9. linux卸载wine qq,ubuntu安装wineQQ
  10. 计算机函数求销售额公式,利用excel函数公式中的LARGE函数和SUM函数提取前五名的销售额...
  11. Ubuntu20.04设置WiFi热点
  12. 豆瓣电影(二):数据分析
  13. XMLHttpRequest请求跨域问题解决方案
  14. 什么是B2B销售?如何有效地向其他企业销售
  15. R语言使用epiDisplay包的logistic.display函数获取二分类logistic回归模型的汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值、简化汇总结果
  16. Jenkins自动化构建vue项目然后发布到远程服务器
  17. 点击跳出商务通对话框
  18. GitHub Pages + Hexo搭建个人博客网站,史上最全教程
  19. 做游戏,不加班行不行?
  20. Liferay 页面

热门文章

  1. 从零玩转Docker(一):什么是Docker?
  2. 自学编程系列——4 Numpy数组
  3. WebUploader上传图片插件
  4. 新华三联合英特尔共同增强服务器内存的可靠性
  5. 音频降噪 java_流音频中的降噪和压缩
  6. 喧喧发布 2.5.4 版本,新增客户端界面缩放等功能
  7. 如何能在面试的头5分钟内让HR喜欢你
  8. AutoCAD .NET 二次开发实例:批量文本查找替换
  9. 谈谈我在PyTorch踩过的12坑
  10. 如何让PDF转换成Excel