Android UI - 粒子爆炸特效

  • 效果
  • 实现
    • 分析
    • 关键代码
  • 源码

效果

实现

分析

首先动画效果需要在一个位于顶层的view上绘制,目的是不被其他控件遮挡。
添加点击事件,触发后给控件加一个抖动动画,结束后开始粒子爆炸效果,爆炸结束后恢复原状。
所有粒子放在一个二维数组里,由动画管理器进行管理,粒子工厂得出每个粒子的颜色、位置、半径、透明度,给二位数组赋值,爆炸特效启动后,在view的onDraw方法里调用管理器的方法使每个粒子开始运动,同时invalidate,使粒子一直运动,直至结束。

关键代码

粒子动画管理器:

public class ExplosionAnimator extends ValueAnimator {private static int default_duration = 1500;private Particle[][] mParticle;private ParticleFactory mParticleFactory;private View mContainer;private Paint mPaint;public ExplosionAnimator(ParticleFactory mParticleFactory, Bitmap bitmap, Rect rect, View mContainer) {this.mParticleFactory = mParticleFactory;this.mContainer = mContainer;mPaint = new Paint();//设置动画百分比、时间setFloatValues(0f, 1f);setDuration(default_duration);mParticle = this.mParticleFactory.generateParticle(bitmap, rect);}public void draw(Canvas canvas) {if (!isStarted()) {return;}//粒子开始运动for (Particle[] particles : mParticle) {for (Particle particle : particles) {particle.advance((Float) getAnimatedValue(), canvas, mPaint);}}mContainer.invalidate();}@Overridepublic void start() {super.start();mContainer.invalidate();}}

位于顶层的view

public class ExplosionField extends View {private List<ExplosionAnimator> mExplosionAnimators;private ParticleFactory mParticleFactory;private OnClickListener onClickListener;public ExplosionField(Context context, ParticleFactory particleFactory) {super(context);this.mExplosionAnimators = new ArrayList<>();this.mParticleFactory = particleFactory;attach2Activity();}private void attach2Activity() {ViewGroup decorView = (ViewGroup) ((Activity) getContext()).getWindow().getDecorView();decorView.addView(this, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));}public void addListener(View view) {if (view instanceof ViewGroup) {ViewGroup viewGroup = (ViewGroup) view;for (int i = 0; i < viewGroup.getChildCount(); i++) {addListener(viewGroup.getChildAt(i));}} else {view.setOnClickListener(getOnClickListener());}}private OnClickListener getOnClickListener() {if (onClickListener == null) {onClickListener = new OnClickListener() {@Overridepublic void onClick(View v) {explode(v);}};}return onClickListener;}private void explode(final View view) {final Rect rect = new Rect();view.getGlobalVisibleRect(rect);if (rect.width() == 0 || rect.height() == 0) {return;}//震动动画ValueAnimator animator = ValueAnimator.ofFloat(0f, 1.0f).setDuration(150);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {view.setTranslationX((Utils.RANDOM.nextFloat() - 0.5f) * view.getWidth() * 0.05f);view.setTranslationY((Utils.RANDOM.nextFloat() - 0.5f) * view.getHeight() * 0.05f);}});animator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);//开始粒子爆炸效果explosion2(view, rect);}});animator.start();}private void explosion2(final View view, Rect rect) {final ExplosionAnimator animator = new ExplosionAnimator(mParticleFactory, Utils.createBitmapFromView(view), rect, this);mExplosionAnimators.add(animator);animator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);view.setClickable(false);view.animate().setDuration(150).scaleX(0).scaleY(0).alpha(0).start();}@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);view.setClickable(true);view.animate().setDuration(150).scaleX(1).scaleY(1).alpha(1).start();mExplosionAnimators.remove(animator);}});animator.start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);for (ExplosionAnimator mExplosionAnimator : mExplosionAnimators) {mExplosionAnimator.draw(canvas);}}
}

源码

去往下载地址

Android UI - 粒子爆炸特效相关推荐

  1. Android制作粒子爆炸特效

    简介 最近在闲逛的时候,发现了一款粒子爆炸特效的控件,觉得比较有意思,效果也不错. 但是代码不好扩展,也就是说如果要提供不同的爆炸效果,需要修改的地方比较多.于是我对源代码进行了一些重构,将爆炸流程和 ...

  2. android 粒子爆炸特效

    先上图: 这是一个高级UI特效,是个动画. 完成这个动画只要3步: 1.控件完成振动效果动画. 2.控件振动动画完成后消失,然后将控件转换成Bitmap. 3.Bitmap完成粒子爆炸特效. 其实完成 ...

  3. Android粒子爆炸特效[可用于任意控件]

    小米手机用户可以看到,小米手机在应用卸载时会有一个粒子爆炸的特效效果,对此类动画效果垂涎已久,奈何一直没有机会用.正好最近项目里需要用到粒子爆炸的特效,于是便抽时间自己也试着仿写了一个效果出来. 先看 ...

  4. MOGRT 金色粒子爆炸特效logo展示pr片头模板mogrt

    这是一个PR动态图形模板Mogrt,金色粒子爆炸特效logo展示PR片头模板mogrt.具有粒子效果的组合,这些效果结合在一起以显示和增强您的媒体. 此模板包含 1 个logo占位符和 1 个可编辑文 ...

  5. three.js 实现图片粒子爆炸特效

    大家好,这里是 CSS 魔法使--alphardex. 以下是最终实现的效果图 撒,哈吉马路由! 准备工作 笔者的three.js模板:点击右下角的fork即可复制一份 世界同步 在我的上一篇博文中, ...

  6. Android 粒子爆炸效果,可以给任意 view 添加该效果

    ViewExplosion 项目地址:835127729/ViewExplosion 简介:Android 粒子爆炸效果,可以给任意 view 添加该效果 更多:作者   提 Bug   官网    ...

  7. 使用opengl实现爆炸特效

    原理是用点阵展示图片,将点阵传给glsl里面的噪音方法更改位置. 图像对象 储存顶点数据 这里我设置了顶点数据和图片的顶点数据传入,因为顶点和图片的点阵不一样分开储存. public class Po ...

  8. unity 点击UI显示3D爆炸特效

    昨天改<降龙十八掌>项目反馈时经理要求我在项目中点击到手印时显示爆炸特效,昨天折腾了好一会没弄好就先弄其它项目反馈了,今天改完反馈后有时间来研究下这个功能. 昨天就简单的写了点代码进行测试 ...

  9. AE484 3D大气电影风格LOGO视频片头爆炸烟雾粒子碎片特效动画制作ae模板

    AE484 3D大气电影风格LOGO视频片头爆炸烟雾粒子碎片特效动画制作ae模板 模板用途:3D,动作,电影,云,史诗,爆炸,火灾,灯光,标志揭示,金属,神秘,粒子,反射,烟雾 软件版本:后效CS6~ ...

最新文章

  1. 细说Java主流日志工具库
  2. 简单工厂模式(详细)(举例饮料)
  3. 使用密码记录工具keepass来保存密码
  4. boost::assertion_failed_msg相关的测试程序
  5. java 昨天今天明天
  6. 剑指offer--打印1到最大的n位数
  7. linux 托盘两个输入法图标,linux mint12安装ibus之后,语言栏不跟随光标和系统托盘输入法图标不能显示问题解决...
  8. bartlett方差齐性检验_数据总体分布检验
  9. idea 设置默认 jdk
  10. SQL Server 数据库做读写分离
  11. 【spring源码分析】spring中类型转换器详解
  12. 虚幻引擎4 DEMO打包下载
  13. 通过企业微信Api向企业微信用户发送消息的实现
  14. typedef用法总结
  15. 我所理解的Remoting(3):创建CAO Service Factory使接口和实现相互分离
  16. php主页备案号底部中间,icp备案号怎么放在网站底部
  17. 安卓手机格式化怎么弄_安卓手机格式化教程、安卓手机怎么格式化-百度经验...
  18. Excel中如何对多个sheet进行同样的操作
  19. android禁止输入框自动弹出软键盘,怎么禁用输入法-Android禁止EditText输入框自动弹出软键盘的4种方法...
  20. 20220302显著性算法:Itti

热门文章

  1. ATW热泵市场现状及未来发展趋势分析
  2. 【分享】unlock music解锁音乐项目CLI版本
  3. 毕业论文格式要求 题注修改
  4. 数据的存储,大端存储和小端小端存储
  5. 兔将十年大作《赤狐书生》特效解析:青蛙精篇
  6. UDP Socket接收缓冲区与netstat Recv-Q
  7. CobaltStrike之Beacon命令使用
  8. Maya2014下载安装与激活
  9. linux 虚拟钢琴,Virtual MIDI Piano Keyboard下载-虚拟MIDI钢琴键盘 v0.8.0 官方版 - 安下载...
  10. AVM环视系统算法框架