package com.leo.fireworktest.bloom;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.Log;
import android.view.animation.AccelerateInterpolator;
import com.leo.fireworktest.R;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Random;
public class Firework {
final float screenWidthMeasure = 720;
private final static int BIG_DEFAULT_ELEMENT_COUNT = 100;//大烟花爆炸数量
private final static int MIDDLE_DEFAULT_ELEMENT_COUNT = 200;
private int BIG_DEFAULT_DURATION = 1300;
private final static float BIG_DEFAULT_LAUNCH_SPEED = 18;
private final static float BIG_DEFAULT_ELEMENT_SIZE = 8;
private final static int SMALL_DEFAULT_ELEMENT_COUNT = 28;//小星星爆炸数量
private int SMALL_DEFAULT_DURATION = 1300;//烟花持续时间
private final static float SMALL_DEFAULT_LAUNCH_SPEED = 18;//烟花分散速度
private final static float SMALL_DEFAULT_ELEMENT_SIZE = 8;//烟花颗粒大小
private final static float DEFAULT_WIND_SPEED = 6;
private final static float DEFAULT_GRAVITY = 1;
private Paint mPaint;
private int count; // count of element
private int duration;
private int[] colors;
private int color;
private float launchSpeed;
private float windSpeed;
private float gravity;
private int windDirection; // 1 or -1
private Location location;
private float elementSize;
// GameSoundPool sounds;//烟花爆炸声音控制
private ValueAnimator animator;
private float animatorValue;
private ArrayList<Element> elements = new ArrayList<Element>();
private AnimationEndListener listener;
Context context;
private int mode = 0;
private float srceenWidth;
private float screenHeight;
//大烟花颗粒随机图片
private int bitmapColor[] = {R.mipmap.light_blue,
R.mipmap.light_yellow, R.mipmap.light_green,
R.mipmap.light_pink, R.mipmap.light_red};
public void setMode(int mode) {
this.mode = mode;
}
public void setScreenSize(float width, float height) {
srceenWidth = width;
screenHeight = height;
}
public Firework(Location location, int windDirection, int mode,
Context context, int color, float width,
float height) {//GameSoundPool sounds,
srceenWidth = width;
screenHeight = height;
this.color = color;
this.location = location;
// this.sounds = sounds;
this.windDirection = windDirection;
this.context = context;
this.mode = mode;
colors = baseColors;
gravity = DEFAULT_GRAVITY;
windSpeed = DEFAULT_WIND_SPEED;
/* if (srceenWidth > 0) {
BIG_DEFAULT_DURATION = (int) (srceenWidth / screenWidthMeasure * BIG_DEFAULT_DURATION);
SMALL_DEFAULT_DURATION = (int) (srceenWidth / screenWidthMeasure * SMALL_DEFAULT_DURATION);
}*/
if (mode == 0) {// 大烟花
count = BIG_DEFAULT_ELEMENT_COUNT;
duration = BIG_DEFAULT_DURATION;
launchSpeed = BIG_DEFAULT_LAUNCH_SPEED;
elementSize = BIG_DEFAULT_ELEMENT_SIZE;
} else if (mode == 1) {//小星星爆炸
count = SMALL_DEFAULT_ELEMENT_COUNT;
duration = SMALL_DEFAULT_DURATION;
launchSpeed = SMALL_DEFAULT_LAUNCH_SPEED;
elementSize = SMALL_DEFAULT_ELEMENT_SIZE;
} else {
count = MIDDLE_DEFAULT_ELEMENT_COUNT;
duration = BIG_DEFAULT_DURATION;
launchSpeed = BIG_DEFAULT_LAUNCH_SPEED;
elementSize = BIG_DEFAULT_ELEMENT_SIZE;
}
init();
}
private float starSize = 15;
private void init() {
Random random = new Random(System.currentTimeMillis());
// color = colors[random.nextInt(colors.length)];
// 给每个火花设定一个随机的方向 0-360
elements.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);//小星星图片资源id
Bitmap 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 Bitmap imageScale(Bitmap bitmap, int dst_w, int dst_h) {
int src_w = bitmap.getWidth();
int src_h = bitmap.getHeight();
float scale_w = ((float) dst_w) / src_w;
float scale_h = ((float) dst_h) / src_h;
Matrix matrix = new Matrix();
matrix.postScale(scale_w, scale_h);
Bitmap dstbmp = Bitmap.createBitmap(bitmap, 0, 0, src_w, src_h, matrix,
true);
return dstbmp;
}
private float timeCount = 1;
private final float dif = 0.00816f;
float startTime;
private boolean needRemove = false;
public boolean getRemove() {
return needRemove;
}
boolean isStart = false;
/*
* 开始烟花爆炸动画
*/
public void fire() {
animator = ValueAnimator.ofFloat(1, 0);
animator.setDuration(duration);
//从头开始动画
animator.setRepeatMode(ValueAnimator.RESTART);
animator.setInterpolator(new AccelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public 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() {
@Override
没有合适的资源?快使用搜索试试~ 我知道了~
FireworkTest.zip
共114个文件
xml:61个
png:16个
bin:7个
需积分: 9 3 下载量 22 浏览量
2020-06-20
17:26:11
上传
评论
收藏 518KB ZIP 举报
温馨提示
越来越多的地方都会用到烟花效果了,而且很多游戏都会有类似通关之后的爆炸特效,今天来分享一下烟花爆炸的动效。升空的动画就不用写了,主要就写个view的位移,重点就是四散开来的爆炸。
资源推荐
资源详情
资源评论
收起资源包目录
FireworkTest.zip (114个子文件)
gradlew.bat 2KB
executionHistory.bin 1.13MB
classAnalysis.bin 390KB
fileHashes.bin 129KB
outputFiles.bin 56KB
taskHistory.bin 23KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 222B
.gitignore 8B
build.gradle 957B
build.gradle 585B
settings.gradle 49B
gradlew 5KB
app.iml 13KB
FireworkTest.iml 964B
gradle-wrapper.jar 53KB
Firework.java 11KB
FireworkView.java 3KB
MainActivity.java 2KB
ExampleInstrumentedTest.java 783B
Element.java 470B
ExampleUnitTest.java 397B
javaCompile.lock 17B
fileContent.lock 17B
executionHistory.lock 17B
fileHashes.lock 17B
buildOutputCleanup.lock 17B
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
light_red.png 3KB
light_blue.png 3KB
icon_fly_star.png 3KB
light_green.png 3KB
light_pink.png 3KB
light_yellow.png 3KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
proguard-rules.pro 772B
gradle.properties 1KB
local.properties 459B
gradle-wrapper.properties 238B
cache.properties 53B
gc.properties 0B
gc.properties 0B
gradle_models.ser 136KB
build_file_checksums.ser 536B
workspace.xml 19KB
ic_launcher_background.xml 6KB
Project.xml 3KB
ic_launcher_foreground.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_1_1_aar.xml 976B
Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml 920B
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml 912B
Gradle__androidx_test_espresso_espresso_core_3_1_1_aar.xml 899B
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 872B
Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml 848B
Gradle__androidx_fragment_fragment_1_0_0_aar.xml 840B
Gradle__androidx_test_monitor_1_1_1_aar.xml 829B
Gradle__androidx_test_ext_junit_1_1_0_aar.xml 828B
Gradle__androidx_test_runner_1_1_1_aar.xml 822B
Gradle__androidx_print_print_1_0_0_aar.xml 816B
Gradle__androidx_test_core_1_1_0_aar.xml 809B
Gradle__androidx_core_core_1_0_1_aar.xml 808B
Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml 793B
Gradle__androidx_annotation_annotation_1_0_0_jar.xml 765B
Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml 764B
activity_main.xml 762B
Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml 747B
Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml 744B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml 744B
Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml 738B
Gradle__com_squareup_javawriter_2_1_1_jar.xml 737B
AndroidManifest.xml 734B
Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml 734B
Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml 734B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml 734B
Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml 723B
Gradle__javax_inject_javax_inject_1_jar.xml 723B
Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml 720B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml 714B
Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 709B
Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml 704B
Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml 699B
Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml 698B
Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 692B
Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 685B
Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml 685B
Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 679B
Gradle__androidx_customview_customview_1_0_0_aar.xml 671B
Gradle__junit_junit_4_12_jar.xml 667B
Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml 664B
gradle.xml 649B
Gradle__androidx_loader_loader_1_0_0_aar.xml 643B
共 114 条
- 1
- 2
资源评论
李易-_-
- 粉丝: 14
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功