SurfaceView實現(xiàn)紅包雨平移動畫
更新時間:2018年07月11日 10:55:57 作者:wsdaijianjun
這篇文章主要為大家詳細(xì)介紹了SurfaceView實現(xiàn)紅包雨平移動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
使用SurfaceView實現(xiàn)簡單的紅包雨動畫,供大家參考,具體內(nèi)容如下
具體代碼:SurfaceViewDemo
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; } /** * 是否點擊在紅包區(qū)域 * @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); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android 限制某個操作每天只能操作指定的次數(shù)(示例代碼詳解)
這篇文章主要介紹了android 限制某個操作每天只能操作指定的次數(shù),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android中的Permission權(quán)限機制介紹
這篇文章主要介紹了Android中的Permission權(quán)限機制介紹,本文講解了權(quán)限策略、權(quán)限聲明、權(quán)限請求、獲取權(quán)限等內(nèi)容,需要的朋友可以參考下2015-04-04Android程序開發(fā)之ListView 與PopupWindow實現(xiàn)從左向右滑動刪除功能
這篇文章主要介紹了Android程序開發(fā)之ListView 與PopupWindow實現(xiàn)滑動刪除功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07Android實現(xiàn)帶指示點的自動輪播無限循環(huán)效果
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)帶指示點的自動輪播無限循環(huán)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android提高之SQLite分頁表格實現(xiàn)方法
這篇文章主要介紹了Android提高之SQLite分頁表格實現(xiàn)方法,在項目開發(fā)中有很高的實用價值,需要的朋友可以參考下2014-08-08