android使用粒子动画实现炊烟袅袅的效果
来源:互联网 发布:怎么下载java api 9 编辑:程序博客网 时间:2024/04/28 01:26
很久以前,做了一个关于旅游景区的项目,要求在等待页面实现一个炊烟袅袅升起的效果,本来是没有这个的,鬼知道我们的ios大神(坑货)从哪找来的,我们项目经理一看非常满意,要我们也加一个!(团队有这样的大神(坑货)都是泪啊!!!)。
(擦干泪,该干的还是要干)首先看这个炊烟,从下往上不间断的旋转上升并且有颜色渐淡的效果,这里至少用到了动画的scale、rotato、alpha三种效果,但是再仔细看发现炊烟的运动轨迹是不规则的,所以使用补间动画是不可能完成的,那么就只有帧动画了,但是我们可怜的ui不会做,于是问了下大神,结果顺便甩过来一张图片
(这个图是白色的,调成灰色是为了和背景区分开)
并且曰了句:“你搜一下粒子效果”。
于是乎,在我们所熟悉的view动画和属性动画之外,我又发现了一项粒子动画,粒子动画在html和flash方面早有应用,专门用于处理一些包含颗粒状图形并且不规则运动的拟物动画,包括雪花啦,雨滴啦,雾气啦,烟花啦等等效果,在github上搜了半天,终于功夫不负有心人,找到了一个专门做粒子效果的库http://plattysoft.github.io/Leonids/。
这个粒子库只有81kb,点此下载,而且使用起来非常方便,首先把下载下来的jar包放入lib中,然后在你工程的build.gradle中配置
dependencies { compile 'com.plattysoft.leonids:LeonidsLib:1.3.1'}
在activity_main.xml中设置一个背景,在烟囱的位置设置一个view,
下面是代码部分,根据Leonids库的官方文档来看,粒子库的可变性非常强,根据不同的方法所产生的效果也是千差万别,所以在剔除所有的效果前,我们先从最主要的开始看
new ParticleSystem(this, 10000, R.mipmap.startup_smoke, 5000).emit(tvSmoke, 50);
反编译后public ParticleSystem(Activity a, int maxParticles, int drawableRedId, long timeToLive) { this(a, maxParticles, a.getResources().getDrawable(drawableRedId), timeToLive, 16908290);}第一个参数是activity,第二个是最多的粒子数,第三个是粒子的图片资源,第四个是持续时间,毫秒制,默认持续时间结束后会从开始重复。
public void emit(View emiter, int particlesPerSecond) { this.emitWithGravity(emiter, 17, particlesPerSecond);}第一个参数为view,view的位置即为粒子效果产生的位置,当然后面还可以设置偏移量,第二个为每秒所产生的粒子数量,这个参数和持续时间的乘积不应当小于最多粒子数,否则动画就会断片。
下面是一些方法的探究
setAcceleration(float acceleration, int angle):规定了粒子运动的加速度和方向;
setRotationSpeedRange(float minRotationSpeed, float maxRotationSpeed):粒子运动的最小和最大的旋转角度
setFadeOut(long duration):淡出的区间,默认从不透明到完全透明
setScaleRange(float minScale, float maxScale):缩放的区间,这与补间动画类似
另外还有一个修饰器,可以对常用动画进行修饰
addModifier(ParticleModifier modifier),可以修饰的动画有:
- AlphaModifier (int initialValue, int finalValue, long startMilis, long endMilis)
- AlphaModifier (int initialValue, int finalValue, long startMilis, long endMilis, Interpolator interpolator)
- ScaleModifier (float initialValue, float finalValue, long startMilis, long endMilis)
- ScaleModifier (float initialValue, float finalValue, long startMilis, long endMilis, Interpolator interpolator)
通过一系列的调试,最终实现效果的代码如下
<span style="font-size:18px;">new ParticleSystem(this, 500, R.mipmap.startup_smoke, 5000) .setAcceleration(0.00003f, 270) .addModifier(new ScaleModifier(0, 1.2f, 1000, 4000)) .setFadeOut(5000) .setRotationSpeedRange(0, 180) .emit(tvSmoke, 50);</span>
代码非常简单,关键是在实际当中,大家要有耐心去探讨,去调试,这里只是给出了实例,具体效果在不同的手机当中可能会有差异,大家根据实际情况自行调试。
- android使用粒子动画实现炊烟袅袅的效果
- 使用animator实现粒子动画效果
- Unity3D中暂停时的动画及粒子效果实现
- Unity3D中暂停时的动画及粒子效果实现
- 基于canvas使用粒子拼出你想要的文字[2]——粒子的动画效果
- 粒子效果的简单实现
- Android 使用View的旋转实现漂亮的动画效果
- android Tween Animations(动画效果-代码实现)的使用
- android 视图动画的使用,Animation重写 实现旋转效果
- Android使用ListView实现滚轮的动画效果
- Android学习-使用ViewFlipper实现屏幕切换的动画效果
- Android碎裂的粒子效果
- IOS 使用 CAEmitterLayer实现粒子效果
- 用CAEmitterLayer实现粒子动画飘雪花效果
- Android动画效果实现
- android实现动画效果
- Android实现动画效果
- Android Animation动画效果的实现
- 配置拦截器实现对用户登录的控制
- c++异常处理
- Xamarin学习笔记——4种不同的页面
- 自动引用计数
- Android入门:深入学习理解 Handler HandlerThread AsyncQueryHandler 三者的关系 收藏
- android使用粒子动画实现炊烟袅袅的效果
- forin的方式遍历集合的坑
- 选择排序
- ES6-Promise
- rc资源文件重写问题的解决
- 专题二1017
- pie
- 变量的定义
- 基因数据处理22之对GRCH38全基因建立BWA索引