最近项目需要做个许多小球碰撞的效果,就用自定义View撸了一个出来,效果如下

这个效果也不复杂,说下算法步骤吧。
1、小球数量ballCount,可以设个最大值,在这个阈值内去随机数
2、小球圆心随机坐标(mX,mY)以及半径radius
3、小球在x方向和y方向的随机速度mSpeedX,mSpeedY
4、本次效果小球默认白色,通过alpha设置透明度,实际你们也可以通过随机颜色值达到五彩频繁的小球效果。
5、初始时给每个小球一个初始随机位置(不能超出屏幕)以及初始随机速度。
6、每个一段时间计算一下小球位置并刷新一下界面,当小球到达屏幕边沿则速度设为当前相反数达到反弹的效果。
为了达到好的刷新效果,本次自定义SurfaceView来实现,主要代码如下:
private void initBalls() {ballBeans = new BallBean[mBallCount];for (int i = 0; i < ballBeans.length; i++) {ballBeans[i] = new BallBean();ballBeans[i].setRadius((new Random().nextInt(mMaxSize-mMinSize) + mMinSize)/2);ballBeans[i].setX(new Random().nextInt(mViewWidth-ballBeans[i].getRadius()));ballBeans[i].setY(new Random().nextInt(mViewHeight-ballBeans[i].getRadius()));ballBeans[i].setSpeedY(new Random().nextBoolean()?(new Random().nextInt(4) + mSpeedY):-(new Random().nextInt(4) + mSpeedY));ballBeans[i].setSpeedX(new Random().nextBoolean()?(new Random().nextInt(4) + mSpeedX):-(new Random().nextInt(4) + mSpeedX));ballBeans[i].setAlpha(new Random().nextInt(255));}
}//更新位置以及速度方向
private void updatePara() {int x;int y;for (BallBean ball : ballBeans) {if (ball == null) {break;}x = ball.getX() + ball.getSpeedX();y = ball.getY() + ball.getSpeedY();if((x-ball.getRadius())<=0 || (x+ball.getRadius())>=mViewWidth){ball.setSpeedX(-ball.getSpeedX());}else {ball.setX(x);}if((y-ball.getRadius())<=0 || (y-ball.getRadius())>=mViewHeight){ball.setSpeedY(-ball.getSpeedY());}else {ball.setY(y);}}
}private void drawView() {if (surfaceHolder == null) {return;}Canvas canvas = surfaceHolder.lockCanvas();if (canvas == null) {return;}canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);drawBall(canvas);surfaceHolder.unlockCanvasAndPost(canvas);
}private void drawBall(Canvas canvas) {for (BallBean ballbean : ballBeans) {paint.setAlpha(ballbean.getAlpha());canvas.drawCircle(ballbean.getX(),ballbean.getY(),ballbean.getRadius(),paint);}
}

工程源码

android自定义View之气球碰撞效果相关推荐

  1. android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球

    Android自定义View--实现水波纹效果类似剩余流量球 三个点   pre   ber   block   span   初始化   move   理解最近突然手痒就想搞个贝塞尔曲线做个水波纹效 ...

  2. android圆形波纹按钮,android自定义View——圆形波纹扫描效果

    蓝牙项目,考虑到后面可能会用到这个扫描的效果,所以参照大神写好的控件,增加了自己需要使用的接口.也顺便巩固一下自定义view中各种零碎的知识点. 需要的效果图 先放一个效果图,点击中心图片开始动画,再 ...

  3. Android自定义View实现QQ气泡效果

    首先我们来看一下最终的效果: 根据我们上边拆分出来的公式,我们分别看看每一个效果需要如何去实现: 红色圆:canvas.drawCircle 消息数字:canvas.drawText 拖拽粘性效果:c ...

  4. android 高仿ios开关,Android自定义view仿IOS开关效果

    本文主要讲解如何在 Android 下实现高仿 iOS 的开关按钮,并非是在 Android 自带的 ToggleButton 上修改,而是使用 API 提供的 onDraw.onMeasure.Ca ...

  5. android 环绕布局,Android自定义View实现圆形环绕效果

    之前项目中需要实现一个四周环绕中心圆形头像的效果,感觉还是自定义比较方便,于是就自己封装了一个控件去实现.先贴张图显示最终效果. 首先自定义一个View继承自LinearLayout,通过动态添加ch ...

  6. Android好评功能,Android自定义View实现五星好评效果

    本文实例为大家分享了Android实现五星好评效果的具体代码,供大家参考,具体内容如下 这个效果想必大家都非常熟悉,那么Android如何自定义实现这种效果呢? 首先自定义属性: 下面看看具体实现: ...

  7. android北京地铁源代码,Android自定义View实现地铁显示牌效果

    本文实例为大家分享了Android地铁显示牌的具体代码,供大家参考,具体内容如下 预览效果 目录 SubwayBoardView.java 代码 public class SubwayBoardVie ...

  8. android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...

    最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...

  9. android 光圈动画,Android 自定义View学习(4)波浪效果+光圈扩散效果

    这篇博客的效果是我仿照WPJY大神的一篇博客做的,加入了一些我自己的改动 先来看下效果 效果图上可能有些卡,但实际运行很流畅 上代码喽~~ /** * 外层的几层光环 */ private Paint ...

  10. Android自定义View——实现水波纹效果类似剩余流量球

    最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...

最新文章

  1. 计算机科学技术作文600,生活因科技而精彩作文600字
  2. Nginx 的这些妙用,你都 get 到了吗?
  3. ViSP视觉库中实现AprilTag的方法
  4. express 对数据库数据增删改查
  5. 【Linux网络编程】TCP
  6. 联邦学习安全与隐私保护综述 A survey on security and privacy of federated learning
  7. 线性规划问题求解(Excel、python和手工求解)
  8. Dukto 傻瓜安装教程
  9. 8、项目管理基础知识
  10. 信息收集之——FOFA网站常用搜索语法
  11. 时光轴 时间轴 效果
  12. C语言删除字符串中的单词
  13. Python Django 基本创建 App创建
  14. 新浪微博热搜榜“背后的男人”讲述热搜背后的秘密
  15. 角色攻击、角色特殊动作
  16. 简单认识向上转型和向下转型
  17. java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解
  18. 自动泊车(之三)车位线定位(视觉定位)
  19. AI Challenger 全球AI挑战赛[一]——大赛介绍
  20. flash如何转html5,闪客精灵如何将Flash格式转换成HTML5

热门文章

  1. optimizer.zero_grad()
  2. 《linux核心应用命令速查》连载五:atq:显示目前使用at命令后待执行的命令队列...
  3. ANSI/ISO C++ Professional Programmer's Handbook 7
  4. vue-amap的使用
  5. 百度编辑器上传图片后转到七牛存储
  6. Noise aware learning for speech enhancement
  7. 协方差与相关系数介绍
  8. webpack-theme-color-replacer自定义element-ui主题
  9. 顶着“顶流”光环面对舆论质疑,为何威震天向左,玲娜贝儿向右?
  10. 知道创宇区块链安全实验室|Deus Finance预言机攻击事件分析