使用SurfaceView實現簡單的紅包雨動畫
使用SurfaceView實現簡單的紅包雨平移動畫
public class TranslateSurfaceView extends SurfaceView implements DrawInterface { private DrawHandler drawHandler; private int width; private int height; private Bitmap bitmap; private int bitmapWidth; private int bitmapHeight; private Toast toast; private int count = 0; private ArrayList<MoveModel> moveList = new ArrayList<>(); public TranslateSurfaceView(Context context) { this(context, null); } public TranslateSurfaceView(Context context, AttributeSet attrs) { this(context, attrs, -1); } public TranslateSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { SurfaceHolder holder = getHolder(); setZOrderOnTop(true); holder.setFormat(PixelFormat.TRANSLUCENT); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); } public void prepare() { DrawThread drawThread = new DrawThread(); drawThread.start(); drawHandler = new DrawHandler(drawThread.getLooper(), this); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_redenvelope2); bitmapWidth = bitmap.getWidth(); bitmapHeight = bitmap.getHeight(); } public void addMoveModel(MoveModel moveModel) { moveList.add(moveModel); } public void start() { count = 0; moveList.clear(); for (int i = 0; i < 10; i++) { generateModel(); } drawHandler.sendEmptyMessage(DrawHandler.START_DRAW_KEY); } public void resume() { drawHandler.sendEmptyMessage(DrawHandler.START_DRAW_KEY); } public void pause() { drawHandler.sendEmptyMessage(DrawHandler.STOP_DRAW_KEY); } public void quit() { if (null != bitmap) { bitmap.recycle(); } if (null != drawHandler) { drawHandler.removeCallbacksAndMessages(null); drawHandler.getLooper().quit(); } } @Override public void startDraw() { SurfaceHolder holder = getHolder(); Canvas canvas = holder.lockCanvas(); if (null == canvas) { return; } Paint paint = new Paint(); paint.setAntiAlias(true); canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); for (MoveModel moveModel : moveList) { canvas.drawBitmap(bitmap, moveModel.x, moveModel.y, paint); if (moveModel.x > width || moveModel.y > height) { resetMoveModel(moveModel); } else { moveModel.y += moveModel.randomY; } } holder.unlockCanvasAndPost(canvas); drawHandler.sendEmptyMessage(DrawHandler.START_DRAW_KEY); } @Override public void stopDraw() { drawHandler.removeMessages(DrawHandler.START_DRAW_KEY); } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_DOWN: checkInRect((int) event.getX(), (int) event.getY()); break; } return true; } /** * 是否點選在紅包區域 * @param x * @param y */ private void checkInRect(int x, int y) { int length = moveList.size(); for (int i = 0; i < length; i++) { MoveModel moveModel = moveList.get(i); Rect rect = new Rect((int) moveModel.x, (int) moveModel.y, (int) moveModel.x + bitmapWidth, (int) moveModel.y + bitmapHeight); if (rect.contains(x, y)) { count++; resetMoveModel(moveModel); if (toast == null) { toast = Toast.makeText(getContext(), "", Toast.LENGTH_SHORT); } toast.setText("搶到紅包" + count); toast.show(); break; } } } private void resetMoveModel(MoveModel moveModel) { Random random = new Random(); moveModel.x = random.nextInt(11) * (width / 10); moveModel.y = 0; moveModel.randomY = (random.nextInt(5) + 2) * getResources().getDisplayMetrics().density * 1.4f; } private void generateModel() { Random random = new Random(); MoveModel moveModel = new MoveModel(); moveModel.moveId = moveList.size() + 1; moveModel.x = random.nextInt(11) * (width / 10); moveModel.y = 0; moveModel.randomY = (random.nextInt(5) + 2) * getResources().getDisplayMetrics().density * 1.4f; moveList.add(moveModel); } }
相關推薦
使用SurfaceView實現簡單的紅包雨動畫
使用SurfaceView實現簡單的紅包雨平移動畫 public class TranslateSurfaceView extends SurfaceView implements DrawInterface { private DrawHandler draw
QML學習之路03: 滑鼠點選視窗實現簡單的旋轉動畫
main.cpp #include <QGuiApplication> //#include <QQmlApplicationEngine> #include <QQ
CSS3 建立簡單的網頁動畫 – 實現彈跳球動
基礎準備對於這個實現,我們需要一個簡單的 div ,並且樣式類名為 ball : HTML 程式碼: <div class="ball"></div> 我們將使用 Flexbox 佈局,把球放到頁面中間,尺寸為 100px * 100px,
CSS3 創建簡單的網頁動畫 – 實現彈跳球動
lte 進入 是不是 radius 想要 ofa enter 全面 封裝 基礎準備對於這個實現,我們需要一個簡單的 div ,並且樣式類名為 ball : HTML 代碼: <div class="ball">&l
css3動畫實現簡單的幻燈片效果
css3 Animation屬性 css3的animation屬性可以像Flash製作動畫一樣,通過關鍵幀控制動畫的每一步,實現複雜的動畫效果。@keyframes規則是建立動畫。 @keyframes規則內指定一個CSS樣式和動畫將逐步從目
php實現簡單的搶紅包
/** * 簡單 搶紅包 示例 */ header("Content-Type: text/html;charset=utf-8");//輸出不亂碼,你懂的 $total=10;//紅包總額
JAVA實現 簡單搶紅包演算法,模擬真實搶紅包。
import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; p
如何實現一個簡單的雨滴動畫?手把手告訴你
本文由雲+社群發表 目的 寫了幾個Flutter的demo,但是對Flutter的自定義view和動畫都不太瞭解,看到一個類似效果在android的實現,就嘗試用Flutter做一下。同時也是學習Flutter的自定義view和動畫相關的知識。 效果 效果動圖
SurfaceView+MediaPlayer 實現簡單的視訊播放
一、實現原理由於MediaPlayer沒有播放視訊的介面,所以需要通過SurfaceView顯示視訊。SurfaceView相當於一個容器,可以把內嵌的MediaPlayer的視訊資料顯示出來。二、實現步驟1、佈局檔案中新增SurfaceView控制元件2、通過Surface
使用canvas實現簡單動畫
大多數 Canvas 繪圖 API 都沒有定義在 <canvas> 元素本身上,而是定義在通過畫布的 getContext()獲得的一個“繪圖環境”物件上。實現如下星星的運動<!DOCTYPE html> <html> <head&g
html+css3實現簡單載入動畫,loading實現
animation:用於使用動畫animation屬性描述原始碼如下:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"
vue 在移動端實現紅包雨 (相容性好)
:class="item.cls" :data-index="index" @webkitAnimationEnd="removeDom"> <a href='javascript:;'> <i :st
用css動畫寫一個下紅包雨的效果
紅包雨的功能相信大家都做過,不過一般都是用js計算的,閒著無聊用css的樣式寫了類似的,主要用的是css的transform和animation結合。大概程式碼邏輯: @keyframes startHB { 0% { transform: translateY(-300px); -ms
使用SurfaceView實現動畫
與自定義view繪圖進行對比:1.view繪圖沒有雙緩衝機制,而surfaceview有2.view繪圖更新時,要全部更新整張圖片,而surfaceview可以更新部分割槽域3.新執行緒無法直接更新view繪圖,需要handler配合。魚兒遊動的動畫:<?xml ver
Android用兩張圖片實現簡單動畫效果
直接在java程式碼裡寫圖片佈局,而不用XML檔案。 先宣告定義: ImageView imageviewsudubg; ImageView imageviewsudu; LinearLayout l
JavaScript 字符串拼接 & setInterval()實現簡單動畫
一次 spa bsp pan 加油 move col func prop 在學習JavaScript DOM編程藝術第十章時,遇到了一個小問題: 想要實現的最終效果:一個小方塊不斷的向下移動。 小方塊絕對定位,設置好top與left值後,寫了一個動態獲取方塊到上方距離並在
怎樣實現通過Animate硬編碼實現簡單的平移、旋轉、縮放及透明度動畫過程
以下只列出主要程式碼: [java] private ImageView scanLight; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta
實現了簡單的旋轉動畫
簡單的實現了以上動畫,程式碼如下: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Animation animatio
JAVA 實現簡單的發紅包案例
png image bsp move span 展示 member img 代碼 1 package Demo511; 2 3 import java.util.ArrayList; 4 5 public class DemoSend { 6
利用css3的animation實現點點點loading動畫效果(二)
設置 str ack rdp 提交 ssi frame spin color box-shadow實現的打點效果 簡介 box-shadow理論上可以生成任意的圖形效果,當然也就可以實現點點點的loading效果了。 實現原理 html代碼,首先需要寫如下html代