日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

一、前言

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

奈何小球間的非對心碰撞公式?jīng)]研究出來,對于我來說真的太復(fù)雜了,等公式給我研究差不多的時候,發(fā)現(xiàn)計算角度的問題也很復(fù)雜。博主表示高中的時候物理從未及格,而且這是大學(xué)物理的課程……然而我大學(xué)并沒有學(xué)物理。目前做出來的效果也很簡單,只是檢測了邊界碰撞,原理就是動量守恒,速度交換。實際效果如絲般順滑,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);// 初始化所有球(設(shè)置顏色和畫筆, 初始化移動的角度)mRandom = new Random();RandomColor randomColor = new RandomColor(); // 隨機生成好看的顏色,github開源庫。mBalls = new Ball[mCount];for(int i=0; i< mCount; i++) { mBalls[i] = new Ball(); // 設(shè)置畫筆 Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(randomColor.randomColor()); paint.setStyle(Paint.Style.FILL); paint.setAlpha(180); paint.setStrokeWidth(0); // 設(shè)置速度 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;}// 圓心和半徑測量的時候才設(shè)置 } @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的判斷是防止重復(fù)檢測碰撞,然后黏在墻上了=。=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;} }}

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

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

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文精品在线| 亚洲一区二区日韩| 欧美日韩一视频区二区| 久久精品国产久精国产| 好看不卡的中文字幕| 国产探花一区二区| 国产精品久久久一区二区| 久久精品国产亚洲aⅴ| 欧美资源在线| 极品av在线| 日本亚洲三级在线| 日韩欧美一区免费| 伊人久久大香伊蕉在人线观看热v| 国产美女撒尿一区二区| 亚洲夜间福利| 一本色道精品久久一区二区三区| 国产精品一区免费在线| 尹人成人综合网| 精品美女视频 | 在线日韩欧美| 欧美精品国产一区| а√在线中文在线新版| 色在线中文字幕| 91精品福利| 亚洲成人精品| 日本欧美一区二区在线观看| 日韩午夜av| 宅男在线一区| 久久国产直播| 国产福利电影在线播放| 久久一区亚洲| 精品国产欧美日韩一区二区三区| 国产欧美日韩视频在线| 日韩二区三区四区| 奇米777国产一区国产二区| 免费久久99精品国产| 欧洲av不卡| 福利精品一区| 98精品视频| 青青国产精品| 久久三级毛片| 久久久777| 国产毛片久久久| 美女高潮久久久| 国产亚洲亚洲| 国产日产一区| 国产另类在线| 国产一区二区三区91| 日韩精品2区| 久久久精品网| 亚洲免费观看高清完整版在线观| 亚洲午夜国产成人| 在线精品一区二区| 国产精品久久久一区二区| 久久精品国产999大香线蕉| 欧美日一区二区三区在线观看国产免| 日韩国产精品久久久| 国产精品久久久久久久久免费高清| 国产精品传媒麻豆hd| 日韩精品水蜜桃| 99在线观看免费视频精品观看| 中文在线日韩| 国产一区二区色噜噜| 亚洲一区欧美二区| 日本午夜精品视频在线观看| 91亚洲一区| 亚洲精品福利| 色爱av综合网| 午夜在线视频观看日韩17c| 日本成人精品| 日韩精品一区二区三区免费观影 | 午夜亚洲精品| 亚洲欧洲美洲国产香蕉| 久久99精品久久久野外观看| 人人草在线视频| 日韩国产高清在线| 日韩精品永久网址| 亚洲a成人v| 色88888久久久久久影院| 欧美一级二级三级视频| 国产一区二区视频在线看| 国产亚洲毛片在线| 丁香婷婷久久| 中文字幕视频精品一区二区三区| 日韩在线观看| 久久精品国产精品亚洲毛片| 五月天激情综合网| 色婷婷精品视频| 欧美日韩国产一区二区在线观看| 亚洲福利免费| 国产一区二区三区不卡av| 在线精品国产亚洲| 欧美亚洲在线日韩| 国产美女撒尿一区二区| 欧美aa在线视频| 在线视频观看日韩| 国产一区二区三区视频在线| 欧美1区2区3| 给我免费播放日韩视频| 欧美国产专区| 欧美sm一区| 午夜亚洲一区| 91欧美极品| 精品不卡一区| aⅴ色国产欧美| 欧美在线看片| 日韩一区亚洲二区| 尤物在线精品| 国产人成精品一区二区三| 成人综合一区| 婷婷激情一区| 蜜臀av一区二区在线免费观看 | 日韩在线中文| 香蕉视频成人在线观看| 亚洲丝袜美腿一区| 日韩欧美美女在线观看| 精品国产乱码| 免费日韩一区二区| 国产精品成人国产| 欧美激情麻豆| 视频一区二区三区入口| 精品视频网站| 美女福利一区二区三区| 亚洲精品看片| 成人在线免费观看网站| 一级欧洲+日本+国产| 国产精品18| 蜜臀精品久久久久久蜜臀 | 日韩在线精品| 伊人国产精品| 日韩欧美一区二区三区在线观看| 亚洲精品免费观看| 久久久久国产精品一区二区| 国产乱码精品一区二区三区四区 | 亚洲精品a级片| 久久亚洲电影| 图片区亚洲欧美小说区| 国产不卡一区| 国产精品黄色| 亚洲专区在线| 国产专区一区| 亚洲日本国产| 美女久久精品| 日韩专区视频网站| 亚洲深爱激情| 波多野结衣久久精品| 国产欧美大片| 久久gogo国模啪啪裸体| 日本免费新一区视频| 日本大胆欧美人术艺术动态| 国产精品一区2区3区| 国产精品va| 久久久久黄色| 麻豆极品一区二区三区| 婷婷亚洲精品| 国产精品九九| 国产精品2区| 亚洲三级观看| 99久久99久久精品国产片果冰| 久久av影院| 久久精品免费一区二区三区| 欧美日韩亚洲一区在线观看| 一区二区电影在线观看| 日韩av电影一区| 国产亚洲精aa在线看| 美女尤物国产一区| 亚洲电影有码| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲精品极品| 麻豆国产精品视频| 日韩综合在线| 久久国产99| 久久wwww| 欧美精品一二| 日韩国产91| 美女网站一区| 欧美久久一区二区三区| 日韩理论视频| 日本亚洲最大的色成网站www| 免费观看久久av| 日韩av一区二区三区四区| 日韩1区2区日韩1区2区| 精品国产乱码久久久| 五月天综合网站| 国产精品二区不卡| 亚洲一区二区三区四区电影| 国产精品一区二区三区av麻| 私拍精品福利视频在线一区| 久久精品免费看| 免费在线视频一区| 日产午夜精品一线二线三线| 夜鲁夜鲁夜鲁视频在线播放| 久久久久九九精品影院| 国产亚洲午夜| 日本а中文在线天堂| 国产一区二区三区不卡av | 性欧美精品高清| 99久久久久| 亚洲尤物在线| 成人日韩av|