默默的等待

有时候想快点回家的时候,浅浅遇到了堵车时间的意外,这个时候怎么办呢?只有静心下来慢慢得带了,高架路上只有默默等待才是比较合适的办法。

package com.example.lovedemo.activity; import androidx.appcompat.app.AppCompatActivity; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.AlertDialog; import android.content.Intent; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.KeyEvent; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import com.example.lovedemo.R; import com.example.lovedemo.dialog.CloseAlertDialogUtils; import com.example.lovedemo.dialog.QuitDialog; import com.example.lovedemo.dialog.VindicateDialog; import com.example.lovedemo.tools.Utils; import com.example.lovedemo.view.StarRainView; import java.util.Random; public class MainActivity extends AppCompatActivity { private FrameLayout container; private StarRainView starRainView; // 多种星形资源 private int[] starResIds = { R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5, R.drawable.a6, R.drawable.a7, R.drawable.a8, R.drawable.a9, R.drawable.a10, R.drawable.a11, R.drawable.a12, R.drawable.a13, R.drawable.a14, R.drawable.a15, R.drawable.a16, R.drawable.a17, R.drawable.a18, R.drawable.a19 }; private Random random = new Random(); private long currentDelay = 0; private final long delayBetweenStars = 500; // 每颗星星间隔时间 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); container = findViewById(R.id.container); starRainView = findViewById(R.id.star_rain_view); // 依次绘制图形 drawLetterI(); drawHeart(); drawLetterU(); } // 创建带有动画的 ImageView private ImageView createStar(float x, float y) { ImageView imageView = new ImageView(this); imageView.setImageResource(starResIds[random.nextInt(starResIds.length)]); imageView.setLayoutParams(new FrameLayout.LayoutParams(35, 35)); imageView.setX(x); imageView.setY(y); imageView.setAlpha(0f); imageView.setScaleX(0.5f); imageView.setScaleY(0.5f); // 缩放和透明度动画 ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f); ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(imageView, "scaleX", 0.5f, 1f); ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(imageView, "scaleY", 0.5f, 1f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(alphaAnim, scaleXAnim, scaleYAnim); animatorSet.setDuration(3500); // 延迟执行 new Handler(Looper.getMainLooper()).postDelayed(animatorSet::start, currentDelay); currentDelay += delayBetweenStars; return imageView; } // 绘制字母 I private void drawLetterI() { int centerX = 530; int startY = 200; // 绘制顶部横杠 for (int i = -2; i < 3; i++) { ImageView topBarStar = createStar(centerX + i * 40, startY - 40); container.addView(topBarStar); } // 绘制垂直列(中间部分) for (int i = 0; i < 9; i++) { float y = startY + i * 40; ImageView star = createStar(centerX, y); container.addView(star); } // 绘制底部横杠 for (int i = -2; i < 3; i++) { ImageView bottomBarStar = createStar(centerX + i * 40, startY + 8 * 40); container.addView(bottomBarStar); } } // 绘制心形图案 private void drawHeart() { int centerX = 530; int centerY = 900; int size = 15; // 设置图片资源,例如你有一个叫 "heart_image" 的图片资源 for (double t = 0; t < 2 * Math.PI; t += 0.2) { double xVal = 16 * Math.pow(Math.sin(t), 3); double yVal = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t); float px = (float) (centerX + xVal * size); float py = (float) (centerY - yVal * size); ImageView star = createStar(px, py); container.addView(star); } // 添加心形中央图片并设置缩放动画 new Handler(Looper.getMainLooper()).postDelayed(() -> { ImageView heartImage = new ImageView(this); heartImage.setImageResource(R.drawable.h_m_m); // 使用自己的心形图片资源 heartImage.setLayoutParams(new FrameLayout.LayoutParams(260, 260)); // 设置合适的大小 heartImage.setX(centerX - 105); // 设置图片X位置 heartImage.setY(centerY - 65); // 设置图片Y位置 // 设置缩放动画 ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(heartImage, "scaleX", 0f, 1f); ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(heartImage, "scaleY", 0f, 1f); ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(heartImage, "alpha", 0f, 1f); AnimatorSet heartAnimatorSet = new AnimatorSet(); heartAnimatorSet.playTogether(scaleXAnim, scaleYAnim, alphaAnim); heartAnimatorSet.setDuration(3500); // 设置动画时长 container.addView(heartImage); heartAnimatorSet.start(); }, 20 * 1000); // 设置延迟,在绘制完心形图案后开始执行 } // 绘制字母 U(底部为圆弧) private void drawLetterU() { long totalDuration = 0; int startX = 410; int startY = 1300; // 左侧横线 for (int i = -6; i < 8; i++) { float x = (float) (startX + i * -5); ImageView star = createStar(x, startY); container.addView(star); } // 右侧横线 for (int i = -6; i < 8; i++) { float x = startX + i * -5; ImageView star = createStar(x + 250, startY); container.addView(star); } // 左侧竖线 for (int i = 0; i < 8; i++) { float y = startY + i * 40; ImageView star = createStar(startX, y); container.addView(star); } // 右侧竖线(更宽了) for (int i = 0; i < 8; i++) { float y = startY + i * 40; ImageView star = createStar(startX + 250, y); container.addView(star); } // 底部绘制一个圆弧形(近似) int centerX = startX + 125; // 新增宽度后的新中点 int centerY = startY + 7 * 40; // Y 不变 int radius = 110; // 增大半径以适应新宽度 int points = 9; // 更多点数,圆弧更平滑 for (int i = 0; i < points; i++) { double angle = Math.PI * i / (points - 1); // 从 π 到 2π 的角度(下半圆) float x = (float) (centerX + radius * Math.cos(angle)); float y = (float) (centerY + radius * Math.sin(angle)); ImageView star = createStar(x, y); container.addView(star); totalDuration += 5500; } new Handler(Looper.getMainLooper()).postDelayed(this::triggerCornerAnimations, totalDuration); } private void triggerCornerAnimations() { // 右上:从左向右移动 showCornerImageWithTranslation(R.drawable.up_right, container.getWidth(), 0, container.getWidth() - 150, -35); // 中间:从左到中间移动 showCornerImageWithTranslation(R.drawable.upmidd, -150, 100, container.getWidth() / 2 - 130, -35, 250, 150); // 左上:从左移动到左上 showCornerImageWithTranslation(R.drawable.up_left, -100, 0, 0, -35); // 左下角动画:保持缩放效果 animateCorner(R.drawable.down_left, -10, container.getHeight() - 150); //下边距动画:保持缩放效果 Utils.animateCorner(R.drawable.downmidd, container.getWidth() / 2 - 120, container.getHeight() - 125, MainActivity.this, container, 250, 200); // 右下角动画:保持缩放效果 animateCorner(R.drawable.down_right, container.getWidth() - 140, container.getHeight() - 150); // 延迟执行,在所有动画完成后添加心形图案下方的图片 new Handler(Looper.getMainLooper()).postDelayed(this::addImagesNearHeart, 6500); // 调整延迟时间确保所有动画完成 } private void animateCorner(int resId, float startX, float startY) { ImageView cornerImage = new ImageView(this); cornerImage.setImageResource(resId); cornerImage.setLayoutParams(new FrameLayout.LayoutParams(150, 150)); cornerImage.setX(startX); cornerImage.setY(startY); cornerImage.setAlpha(0f); AnimatorSet animatorSet = new AnimatorSet(); // 缩放动画:保持原有逻辑 cornerImage.setScaleX(0.5f); cornerImage.setScaleY(0.5f); ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(cornerImage, "scaleX", 0.5f, 1f); ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(cornerImage, "scaleY", 0.5f, 1f); ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(cornerImage, "alpha", 0f, 1f); animatorSet.playTogether(scaleXAnim, scaleYAnim, alphaAnim); animatorSet.setDuration(3500); container.addView(cornerImage); animatorSet.start(); } private void showCornerImageWithTranslation(int resId, float startX, float startY, float endX, float endY) { ImageView cornerImage = new ImageView(this); cornerImage.setImageResource(resId); cornerImage.setLayoutParams(new FrameLayout.LayoutParams(150, 150)); cornerImage.setX(startX); cornerImage.setY(startY); cornerImage.setAlpha(0f); cornerImage.setScaleX(1f); cornerImage.setScaleY(1f); container.addView(cornerImage); // Alpha animation ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(cornerImage, "alpha", 0f, 1f); // Translation animations ObjectAnimator translateXAnim = ObjectAnimator.ofFloat(cornerImage, "x", startX, endX); ObjectAnimator translateYAnim = ObjectAnimator.ofFloat(cornerImage, "y", startY, endY); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(alphaAnim, translateXAnim, translateYAnim); animatorSet.setDuration(3500); animatorSet.start(); } // 创建平移动画的辅助方法 private void showCornerImageWithTranslation(int resId, float startX, float startY, float endX, float endY, int width, int height) { ImageView cornerImage = new ImageView(this); cornerImage.setImageResource(resId); // 设置图片的宽度和高度 cornerImage.setLayoutParams(new FrameLayout.LayoutParams(width, height)); cornerImage.setX(startX); cornerImage.setY(startY); cornerImage.setAlpha(0f); cornerImage.setScaleX(1f); cornerImage.setScaleY(1f); container.addView(cornerImage); // Alpha 动画 ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(cornerImage, "alpha", 0f, 1f); ObjectAnimator translateXAnim = ObjectAnimator.ofFloat(cornerImage, "x", startX, endX); ObjectAnimator translateYAnim = ObjectAnimator.ofFloat(cornerImage, "y", startY, endY); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(alphaAnim, translateXAnim, translateYAnim); animatorSet.setDuration(3500); // 在动画结束后,添加缩放动画的新图片 animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); // 在图片的正中心创建新图片 float centerX = (float) (cornerImage.getX() + (cornerImage.getWidth() / 1.6)); float centerY = (float) (cornerImage.getY() + (cornerImage.getHeight() / 1.9)); // 创建新图片 ImageView zoomImage = new ImageView(MainActivity.this); zoomImage.setImageResource(R.drawable.love_middle_down); // 替换成你的新图片资源 zoomImage.setLayoutParams(new FrameLayout.LayoutParams(50, 50)); // 设置缩放图片的大小 container.addView(zoomImage); // 设置新图片的初始位置为正中心 zoomImage.setX(centerX - 50); // 100/2 使得图片位于中心 zoomImage.setY(centerY - 50); // 100/2 使得图片位于中心 // 创建缩放动画 ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(zoomImage, "scaleX", 0f, 1f); ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(zoomImage, "scaleY", 0f, 1f); AnimatorSet scaleAnimatorSet = new AnimatorSet(); scaleAnimatorSet.playTogether(scaleXAnim, scaleYAnim); scaleAnimatorSet.setDuration(3500); // 设定缩放动画的时长 scaleAnimatorSet.start(); // 在屏幕的左右两边添加缩放动画的新图片 // 左侧图片 ImageView leftImage = new ImageView(MainActivity.this); leftImage.setImageResource(R.drawable.midd_midd_left); // 替换成你左侧的图片资源 leftImage.setLayoutParams(new FrameLayout.LayoutParams(150, ViewGroup.LayoutParams.MATCH_PARENT)); // 设置左侧图片的大小 container.addView(leftImage); // 设置左侧图片的位置 leftImage.setX(0); // 屏幕左边 leftImage.setY(centerY - 50); // 垂直居中 // 创建左侧图片的缩放动画 ObjectAnimator leftScaleXAnim = ObjectAnimator.ofFloat(leftImage, "scaleX", 0f, 1f); ObjectAnimator leftScaleYAnim = ObjectAnimator.ofFloat(leftImage, "scaleY", 0f, 1f); AnimatorSet leftScaleAnimatorSet = new AnimatorSet(); leftScaleAnimatorSet.playTogether(leftScaleXAnim, leftScaleYAnim); leftScaleAnimatorSet.setDuration(3500); leftScaleAnimatorSet.start(); // 右侧图片 ImageView rightImage = new ImageView(MainActivity.this); rightImage.setImageResource(R.drawable.midd_midd_right); // 替换成你右侧的图片资源 rightImage.setLayoutParams(new FrameLayout.LayoutParams(150, ViewGroup.LayoutParams.MATCH_PARENT)); // 设置右侧图片的大小 container.addView(rightImage); // 设置右侧图片的位置 rightImage.setX(getResources().getDisplayMetrics().widthPixels - 150); // 屏幕右边 rightImage.setY(centerY - 50); // 垂直居中 // 创建右侧图片的缩放动画 ObjectAnimator rightScaleXAnim = ObjectAnimator.ofFloat(rightImage, "scaleX", 0f, 1f); ObjectAnimator rightScaleYAnim = ObjectAnimator.ofFloat(rightImage, "scaleY", 0f, 1f); AnimatorSet rightScaleAnimatorSet = new AnimatorSet(); rightScaleAnimatorSet.playTogether(rightScaleXAnim, rightScaleYAnim); rightScaleAnimatorSet.setDuration(3500); rightScaleAnimatorSet.start(); } }); animatorSet.start(); } private void addImagesNearHeart() { // 获取心形图案的位置 int centerX = 530; int centerY = 900; // 左侧图片 ImageView leftImage = new ImageView(this); leftImage.setImageResource(R.drawable.love_m_left); // 替换成你的左侧图片资源 leftImage.setLayoutParams(new FrameLayout.LayoutParams(150, 150)); // 设置图片大小 leftImage.setX(centerX - 250); // 设置位置,心形图片左侧 leftImage.setY(centerY + 100); // 设置位置,心形图片下方 leftImage.setAlpha(0f); // 初始透明度为0 container.addView(leftImage); // 右侧图片 ImageView rightImage = new ImageView(this); rightImage.setImageResource(R.drawable.hudei); // 替换成你的右侧图片资源 rightImage.setLayoutParams(new FrameLayout.LayoutParams(150, 150)); // 设置图片大小 rightImage.setX(centerX + 280); // 设置位置,心形图片右侧 rightImage.setY(centerY + 50); // 设置位置,心形图片下方 rightImage.setAlpha(0f); // 初始透明度为0 container.addView(rightImage); // 缩放动画 ObjectAnimator scaleXLeft = ObjectAnimator.ofFloat(leftImage, "scaleX", 0f, 1f); ObjectAnimator scaleYLeft = ObjectAnimator.ofFloat(leftImage, "scaleY", 0f, 1f); ObjectAnimator alphaLeft = ObjectAnimator.ofFloat(leftImage, "alpha", 0f, 1f); ObjectAnimator scaleXRight = ObjectAnimator.ofFloat(rightImage, "scaleX", 0f, 1f); ObjectAnimator scaleYRight = ObjectAnimator.ofFloat(rightImage, "scaleY", 0f, 1f); ObjectAnimator alphaRight = ObjectAnimator.ofFloat(rightImage, "alpha", 0f, 1f); // 创建 AnimatorSet AnimatorSet animatorSetLeft = new AnimatorSet(); animatorSetLeft.playTogether(scaleXLeft, scaleYLeft, alphaLeft); animatorSetLeft.setDuration(3500); // 设置动画时长 AnimatorSet animatorSetRight = new AnimatorSet(); animatorSetRight.playTogether(scaleXRight, scaleYRight, alphaRight); animatorSetRight.setDuration(3500); // 设置动画时长 // animatorSetRight.addListener(new AnimatorListenerAdapter() { // @Override // public void onAnimationEnd(Animator animation) { // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { // @Override // public void run() { // int type = 2; // VindicateDialog dialog = VindicateDialog.getInstance(); // VindicateDialog.showConfirmDialog(MainActivity.this, "", "还没结束哦,请点击同意进入下一个页面哦= ̄ω ̄=",type); // dialog.setMonDialogButtonClickListener(new VindicateDialog.OnDialogButtonClickListener() { // @Override // public void onPositiveButtonClick(AlertDialog dialog) { // Intent intent = new Intent(MainActivity.this, VindicateActivity.class); // startActivity(intent); // finish(); //关闭当前Activity // } // // @Override // public void onNegativeButtonClick(AlertDialog dialog) { // //点击不同意按钮关闭应用 // dialog.dismiss(); // CloseAlertDialogUtils instance = CloseAlertDialogUtils.getInstance(); // CloseAlertDialogUtils.showConfirmDialog(MainActivity.this, "", "小姐姐确定要这么狠心的离开吗?还有惊喜哦,拜托看完好吗~(>﹏<)"); // instance.setMonDialogButtonClickListener(new CloseAlertDialogUtils.OnDialogButtonClickListener() { // @Override // public void onClosePositiveButtonClick(AlertDialog dialog) { // Intent intent = new Intent(MainActivity.this, VindicateActivity.class); // startActivity(intent); // finish(); //关闭当前Activity // } // // @Override // public void onCloseNegativeButtonClick(AlertDialog dialog) { // int type = 2; // //点击不同意按钮关闭应用 // dialog.dismiss(); // QuitDialog instance = QuitDialog.getInstance(); // QuitDialog.showConfirmDialog(MainActivity.this, "", "即使不知归期,我也会默默等待,挥手道别,是为了更好的相遇。这次是真的要再见了小姐姐o(*≧▽≦)ツ",type); // instance.setMonDialogButtonClickListener(new QuitDialog.OnDialogButtonClickListener() { // @Override // public void onClosePositiveButtonClick(AlertDialog dialog) { // // } // // @Override // public void onCloseNegativeButtonClick(AlertDialog dialog) { // dialog.dismiss(); // System.exit(0); // } // }); // } // }); // } // }); // // } // }, 10000); // 动画结束后延迟10秒 // } // }); // 启动动画 animatorSetLeft.start(); animatorSetRight.start(); } //监听退出 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Utils.exit(MainActivity.this); return false; } return super.onKeyDown(keyCode, event); } } 在上面代码中添加星星图片随机出现
07-15
提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值