越来越多的地方都会用到烟花效果了,而且很多游戏都会有类似通关之后的爆炸特效,今天来分享一下烟花爆炸的动效。升空的动画就不用写了,主要就写个view的位移,重点就是四散开来的爆炸。
下面就来看如何处理的吧,将烟花爆炸的火花转变为bitmap,然后根据这个火花的个数,创建出多个bitmap,给每一个bitmap一个随机的角度,为后面的四散做准备:

 private void init() {Random random = new Random(System.currentTimeMillis());// color = colors[random.nextInt(colors.length)];// 给每个火花设定一个随机的方向 0-360elements.clear();Log.d("zxc118", "Firework init mode = " + mode + " count = " + count);if (mode == 0) {for (int i = 0; i < count; i++) {color = bitmapColor[random.nextInt(bitmapColor.length)];InputStream is = context.getResources().openRawResource(color);Bitmap mBitmap = BitmapFactory.decodeStream(is);elements.add(new Element(color, Math.toRadians(random.nextInt(360)), random.nextFloat() * launchSpeed,mBitmap));}} else {float bitmapScale = 2;if (srceenWidth > 0) {bitmapScale = srceenWidth / screenWidthMeasure * bitmapScale;}for (int i = 0; i < count; i++) {InputStream is = context.getResources().openRawResource(color);//小星星图片资源idBitmap mBitmap = BitmapFactory.decodeStream(is);/*  Bitmap shapeBitmap = Utils.drawShapeBitmap(mBitmap,(int) (srceenWidth / screenWidthMeasure * starSize),"star");*/Bitmap shapeBitmap = imageScale(mBitmap, 35, 35);elements.add(new Element(color, Math.toRadians(random.nextInt(360)), random.nextFloat() * launchSpeed,shapeBitmap));}}mPaint = new Paint();mPaint.setColor(Color.WHITE);timeCount = 1;animatorValue = timeCount;}

剩下就是爆炸,这个爆炸就是给火花一个随机的位置进行移动,然后通过不停的绘画,然后在屏幕上产生效果,当然这个中间会有不断的更新火花的位置,为这个火花下一次位置做准备。

 * 开始烟花爆炸动画*/public void fire() {animator = ValueAnimator.ofFloat(1, 0);animator.setDuration(duration);
//从头开始动画animator.setRepeatMode(ValueAnimator.RESTART);animator.setInterpolator(new AccelerateInterpolator());animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {animatorValue = (Float) valueAnimator.getAnimatedValue();Log.d("zxc55", "onAnimationUpdate animatorValue = " + animatorValue);
// 计算每个火花的位置isStart = true;for (Element element : elements) {element.x = (float) (element.x+ Math.cos(element.direction) * element.speed* animatorValue + windSpeed * windDirection);element.y = (float) (element.y- Math.sin(element.direction) * element.speed* animatorValue + gravity * (1 - animatorValue));}}});animator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {Log.d("zxc118", "onAnimationEnd clear animator");listener.onAnimationEnd(Firework.this);needRemove = true;}});animator.start();
//        if (mode == 0 && sounds != null) {//            sounds.playSound(9, 0);
//        }}

再来看看将这个火花绘制到画布上,和更新位置的代码吧。

 public void draw(Canvas canvas) {mPaint.setAlpha((int) (225 * animatorValue));/** 有些情况小星星动画不能停止,强制结束*/n++;if (n > maxTime) {listener.onAnimationEnd(Firework.this);}Random random = new Random();for (Element element : elements) {float left = location.x + element.x/3;float top = location.y + element.y/3;
//            left=left-left*200/rangeSize;
//            top=top-top*200/rangeSize;mPaint.setAlpha(random.nextInt(225));canvas.drawBitmap(element.bitmap, left,top, mPaint);}/** 更新烟花位置*/if (n > 2 && !isStart) {updateLocation();}}public void updateLocation() {animatorValue -= dif;if (animatorValue < 0) {listener.onAnimationEnd(Firework.this);}for (Element element : elements) {element.x = (float) (element.x+ Math.cos(element.direction) * element.speed* animatorValue + windSpeed * windDirection);element.y = (float) (element.y- Math.sin(element.direction) * element.speed* animatorValue + gravity * (1 - animatorValue));}}

仿抖音短视频系统源码烟花爆炸动效相关推荐

  1. 仿抖音短视频系统源码,android 时间戳转换

    仿抖音短视频系统源码,android 时间戳转换相关的代码 package util;import java.text.SimpleDateFormat; import java.util.Calen ...

  2. 仿抖音短视频系统源码,获取系统图片

    仿抖音短视频系统源码,实现获取系统图片的相关代码如下: 首先开权限 <uses-permission android:name="android.permission.WRITE_EX ...

  3. 仿抖音短视频系统源码,给控件添加阴影效果

    仿抖音短视频系统源码中,实现给控件添加阴影效果的相关代码 1.使用elevation和translationZ实现阴影效果 这种方式需要在API 21才可以使用,具体代码实现片段如下: <Tex ...

  4. 仿抖音短视频APP源码,刷新屏幕计时,重置系统休眠计时

    仿抖音短视频APP源码,刷新屏幕计时,重置系统休眠计时的相关代码,可同时实现息屏状态下亮屏, 或者即将息屏时, 重置系统休眠计时 PowerManager mPowerManager = (Power ...

  5. 如何开发仿抖音短视频APP源码?

    如何开发仿抖音短视频APP源码? 流程列表 开发一个短视频最主要的流程分为 3 个,下面我将分步教你实现这 3 个流程下的各个功能点,功能点 API 可按需调用: 视频拍摄 a.启动拍摄 b.给拍摄添 ...

  6. 仿抖音短视频APP源码如何开发抖音类似特效

    仿抖音短视频APP源码如何开发抖音类似特效 1.特效概览 特效列表 特效列表 2.『灵魂出窍』 抖音的实现效果如下: 灵魂出窍 我的实现效果如下: ezgif.com-rotate.gif 代码实现 ...

  7. 仿抖音短视频APP源码,滚动视图

    仿抖音短视频APP源码,滚动视图相关的代码 在xml中添加滚动视图 垂直方向上滚动 <?xml version="1.0" encoding="utf-8" ...

  8. 仿抖音短视频APP源码,顶部导航栏切换详解

    仿抖音短视频APP源码,顶部导航栏切换详解的相关代码 class DaoHangNan extends StatefulWidget //继承StatefulWidget{TabController ...

  9. 仿抖音短视频APP源码,底部弹窗对话框

    仿抖音短视频APP源码,底部弹窗对话框的相关代码 核心代码 final Dialog dialog = new Dialog(this, R.style.BottomDialogStyle); Vie ...

最新文章

  1. php进程通讯 windows,windows-server-2008 – PHP进程一次运行一个,总是占用一个核心的100%...
  2. 2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线
  3. python爬虫完整实例-python爬虫实战之爬取京东商城实例教程
  4. 使用qwt作曲线图——有网格线背景的画法
  5. loadrunner 更新中......
  6. 手机号归属地区编码_这些关于手机号码的冷知识 你知道吗
  7. Android7.0 PowerManagerService亮灭屏分析(二)
  8. useradd、adduser和userdel在使用时的注意事项
  9. java 应用是单机集群_【架构】Tomcat单机部署多应用Windows
  10. idea javamaven项目 连接sqlserver 数据库方法
  11. java图形界面_学习Java有什么用?Java的应用领域有哪些?
  12. DOS命令 For Set
  13. java 小程序 学生成绩_自己搞的小程序,学生管理信息系统,大家来看看
  14. QAndroidJniObject::callStaticObjectMethod参数含义
  15. 华三防火墙安全策略配置
  16. TCGA肿瘤数据分析专题
  17. chrome是什么?
  18. 教你快递查询单号查询物流
  19. html t调整字间距,网页中怎t样调整行间距及字横向间距20120726.doc
  20. Java是剑客-飘逸;.NET是刀客-霸道 (一) 【转载】

热门文章

  1. C++描述 LeetCode 26. 删除排序数组中的重复项
  2. android 新浪微博登录接口,[Android] 使用新浪微博SDK进行SSO登录
  3. python的数据库中间件_sparrow
  4. matlab中Cci,【每日一策】MATLAB量化交易策略之 CCI择时
  5. 超实用的浏览器插件:CSDN全站去广告
  6. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)
  7. android如何避免钓鱼页面,Android应用钓鱼劫持风险的检测与防范
  8. ubuntu使用 AppImage实现QQ和TIM的使用
  9. vtk中实现3D模型(读取文件)
  10. 移除Linux体系下不需求的效劳