电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android實現(xiàn)氣泡動畫

瀏覽:22日期:2022-09-19 09:20:51

本文實例為大家分享了Android實現(xiàn)氣泡動畫的具體代碼,供大家參考,具體內容如下

一、前言

本來想做一個類似window氣泡屏保的動畫效果。

奈何小球間的非對心碰撞公式?jīng)]研究出來,對于我來說真的太復雜了,等公式給我研究差不多的時候,發(fā)現(xiàn)計算角度的問題也很復雜。博主表示高中的時候物理從未及格,而且這是大學物理的課程……然而我大學并沒有學物理。目前做出來的效果也很簡單,只是檢測了邊界碰撞,原理就是動量守恒,速度交換。實際效果如絲般順滑,gif錄制掉幀了。

Android實現(xiàn)氣泡動畫

二、實現(xiàn)代碼

這次就不封裝了,反正也只是半成品,寫著玩玩。

用到了一個很不錯的庫:點擊查看,隨機生成好看的顏色,國人寫的,厲害。

/** * Created by AItsuki on 2016/1/12. */public class BallView extends View { private final Random mRandom; class Ball {int radius; // 半徑float cx; // 圓心float cy; // 圓心float vx; // X軸速度float vy; // Y軸速度Paint paint;// 移動void move() { //向角度的方向移動,偏移圓心 cx += vx; cy += vy;}int left() { return (int) (cx - radius);}int right() { return (int) (cx +radius);}int bottom() { return (int) (cy + radius);}int top() { return (int) (cy - radius);} } private int mCount = 40; // 小球個數(shù) private int maxRadius; // 小球最大半徑 private int minRadius; // 小球最小半徑 private int minSpeed = 5; // 小球最小移動速度 private int maxSpeed = 20; // 小球最大移動速度 private int mWidth = 200; private int mHeight = 200; public Ball[] mBalls; // 用來保存所有小球的數(shù)組 public BallView(Context context, AttributeSet attrs) {super(context, attrs);// 初始化所有球(設置顏色和畫筆, 初始化移動的角度)mRandom = new Random();RandomColor randomColor = new RandomColor(); // 隨機生成好看的顏色,github開源庫。mBalls = new Ball[mCount];for(int i=0; i< mCount; i++) { mBalls[i] = new Ball(); // 設置畫筆 Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(randomColor.randomColor()); paint.setStyle(Paint.Style.FILL); paint.setAlpha(180); paint.setStrokeWidth(0); // 設置速度 float speedX = (mRandom.nextInt(maxSpeed -minSpeed +1)+5)/10f; float speedY = (mRandom.nextInt(maxSpeed -minSpeed +1)+5)/10f; mBalls[i].paint = paint; mBalls[i].vx = mRandom.nextBoolean() ? speedX : -speedX; mBalls[i].vy = mRandom.nextBoolean() ? speedY : -speedY;}// 圓心和半徑測量的時候才設置 } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mWidth = resolveSize(mWidth, widthMeasureSpec);mHeight = resolveSize(mHeight, heightMeasureSpec);setMeasuredDimension(mWidth, mHeight);maxRadius = mWidth/12;minRadius = maxRadius/2;// 初始化圓的半徑和圓心for (int i=0; i<mBalls.length; i++) { mBalls[i].radius = mRandom.nextInt(maxRadius+1 - minRadius) +minRadius;// mBalls[i].mass = (int) (Math.PI * mBalls[i].radius * mBalls[i].radius); // 初始化圓心的位置, x最小為 radius, 最大為mwidth- radius mBalls[i].cx = mRandom.nextInt(mWidth - mBalls[i].radius) + mBalls[i].radius; mBalls[i].cy = mRandom.nextInt(mHeight - mBalls[i].radius) + mBalls[i].radius;} } @Override protected void onDraw(Canvas canvas) {long startTime = System.currentTimeMillis();// 先畫出所有圓for (int i = 0; i < mCount; i++) { Ball ball = mBalls[i]; canvas.drawCircle(ball.cx, ball.cy, ball.radius, ball.paint);}// 球碰撞邊界for (int i = 0; i < mCount; i++) { Ball ball = mBalls[i]; collisionDetectingAndChangeSpeed(ball); // 碰撞邊界的計算 ball.move(); // 移動}long stopTime = System.currentTimeMillis();long runTime = stopTime - startTime;// 16毫秒執(zhí)行一次postInvalidateDelayed(Math.abs(runTime -16)); } // 判斷球是否碰撞碰撞邊界 public void collisionDetectingAndChangeSpeed(Ball ball) {int left = getLeft();int top = getTop();int right = getRight();int bottom = getBottom();float speedX = ball.vx;float speedY = ball.vy;// 碰撞左右,X的速度取反。 speed的判斷是防止重復檢測碰撞,然后黏在墻上了=。=if(ball.left() <= left && speedX < 0) { ball.vx = -ball.vx;} else if(ball.top() <= top && speedY < 0) { ball.vy = -ball.vy;} else if(ball.right() >= right && speedX >0) { ball.vx = -ball.vx;} else if(ball.bottom() >= bottom && speedY >0) { ball.vy = -ball.vy;} }}

代碼直接復制就可以用,所以就不提供Demo下載了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關文章:
主站蜘蛛池模板: 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 包头市鑫枫装饰有限公司| 【连江县榕彩涂料有限公司】官方网站 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动| 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 截齿|煤截齿|采煤机截齿|掘进机截齿|旋挖截齿-山东卓力截齿厂家报价 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 短信群发平台_群发短信软件_短信营销-讯鸽科技|