热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

android小球爆炸动画,自定义View抛物线爆炸动画

一、最近在写商城方面的业务,需求在商品加如购物车过程中,实现一个抛物线加入的动画。先看我写的效果图:ezgif.com-video-to-

一、最近在写商城方面的业务,需求在商品加如购物车过程中,实现一个抛物线加入的动画。

先看我写的效果图:

}

}

3.单个小球的初始化,新建小球类LittleBall,构造:

public LittleBall(int endX, int endY, int w, int h, Paint paint, int color) {

this.mView_endX = endX;

this.mView_endY = endY;

this.mView_w = w;

this.mView_h = h;

this.mPaint = paint;

this.mColor = color;

init();

}

根据ParabolaView传递过来的的宽高和颜色进行计算ball的起始位置和控制点,核心计算:

public void init() {

this.mStart_X = Utils.randomIntPositive(mView_endX + mView_w, mView_endX);

this.mStart_Y = Utils.randomIntPositive(mView_endY + mView_h, mView_endY);

this.mEnd_X = Utils.randomIntPositive(mView_endX + mView_w, mView_endX - mView_w);

this.mEnd_Y = mView_endY + mView_h;

this.mRadius = Utils.randomIntPositive(12, 4);

mControl_X = (mStart_X + mEnd_X) / 2;

mControl_Y = mStart_Y - 300;

}

4.多个小球的爆炸BoomView:

这里就比较简单了,和之前的抛物线动画思路一样

public void drawBall(Canvas canvas) {

if (null &#61;&#61; ballList || ballList.size() <&#61; 0) {

return;

}

for (int i &#61; 0; i

ballList.get(i).drawBall(canvas);

if (mAnimValue !&#61; 0) {

ballList.get(i).setXY(mAnimValue);

this.setAlpha(1 - mAnimValue);

}

}

}

5.ParabolaView和BoomView之间的通讯&#xff1a;

因为要根据商品图片传递小球颜色和个数&#xff0c;所以避免不了它们之间的通讯&#xff0c;解决策略是通过当前Activity为桥梁进行传递数据&#xff0c;Activity实现ParabolaView中的接口AnimEndInterface并重写:

&#64;Override

public void onDrawBall(List littleBalls) {

boomView.startAnim(littleBalls);

}

四、用法简介(栗子)&#xff1a;

ParabolaView和BoomView放在同一个布局之中&#xff0c;设置OnTouchListener事件&#xff0c;将手指点击处作为终点坐标传入&#xff0c;开启动画效果。

&#64;Override

public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() &#61;&#61; MotionEvent.ACTION_UP) {

parabolaView.startAnim((int) event.getX(), (int) event.getY());

}

return true;

}

当前Activity必须实现ParabolaView中的AnimEndInterface接口(已改)

Activity实现AnimEndInterface太过于局限&#xff0c;更改成聚合的设计模式&#xff0c;适用于Activity/ViewGroup/Dialog等..

&#64;Override

public void onDrawBall(List littleBalls) {

boomView.startAnim(littleBalls);

五、遗留问题

配置文件attrs等相关细节懒得去做了&#xff0c;有时间再搞..

六、源码地址&#xff1a;

自定义View-抛物线爆炸



推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • andr ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
author-avatar
mobiledu2502919283
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有