使用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 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);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。

android红包雨动画,SurfaceView实现红包雨平移动画相关推荐

  1. android 从左向右平移_Android实现循环平移动画示例

    实现用一张背景图做循环从左往右平移动画. 1.实现两个animation xml文件,一个起始位置在-100%p ,一个在0%p.设置repeat属性为循环,重复. android:repeatMod ...

  2. android 页面翻转进场动画_Android实现翻转及延迟动画效果

    最近在学习安卓一些动画效果制作.做了点翻转和延迟入场动画的效果,并做了些封装.动画基于属性动画实现的,所以仅能在api11以后运行,不过现在应该也没有11以前的机器了吧...废话不多说,先上效果再贴代 ...

  3. Android动画学习记录二(属性动画、估值器和插值器)

    Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) 一.补间动画缺陷 二.属性 ...

  4. Android平移补间动画,Android 补间动画之平移动画TranslateAnimation

    Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...

  5. Android开发实战《手机安全卫士》——3.“手机防盗”模块实现 .9格式图片说明 数据库操作 平移动画

    文章目录 1.手机防盗--密码加密过程 & 加密后的验证 2.手机防盗--对话框展示样式兼容低版本 3.手机防盗--设置界面 & 功能列表界面跳转逻辑处理 4.手机防盗--导航界面的布 ...

  6. android image 位移动画_「translateanimation」Android 补间动画之平移动画TranslateAnimation - seo实验室...

    translateanimation 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 durati ...

  7. Android 抖音爱心动画,Android动画 - 仿抖音加载动画

    在地铁中刷抖音,由于网络不通畅加载很慢,抖音会加载一个加载动画,感觉很有意思,于是分析了一下,自己写了Demo,实现效果. 效果图 分析动画 首先分析动画,初始状态是由两个相切的圆形图案组成. 将动画 ...

  8. ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画

    转自:标哥的技术博客,作者:黄仪标(微博) 前段时间帮某某做了一个动画效果,今天分享给大家.关于动画的基础知识,这里不会细说,如果您还没有核心动画的基础知识,请先阅读相关文章,了解核心动画如何使用,然 ...

  9. iOS动画专题·UIView二维形变动画与CAAnimation核心动画

    点击上方"iOS开发",选择"置顶公众号" 关键时刻,第一时间送达! 1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动 ...

最新文章

  1. python自定义库文件路径
  2. java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...
  3. 三个python文件怎么关联___name__= __main__怎么解释 怎么用 另外两个py文件之间的互动关联...
  4. 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
  5. sql里如何for循环
  6. Apache TomEE(和Tomcat)的自签名证书
  7. MS SQL 能否修改实例名称
  8. 利用python提取网站曲线图数据
  9. sql关键字_SQL关键字
  10. Spring之事务控制
  11. 2019年美赛获奖分享经验
  12. 【OP-TEE】TA的加载(超详细)
  13. Mybatis 异常(SQL 语法异常 ambiguous)
  14. cpptraj对于轨迹的浓缩
  15. domino服务器库文件,Domino 服务器设置程序 涉及的文件
  16. java玫瑰花代码_Java版给爱人表白的玫瑰花程序代码
  17. Python3制作二维码
  18. Unity的Bounds(包围盒)简记
  19. dp——洛谷P1240 诸侯安置
  20. excel高级筛选怎么用_excel:高级筛选技巧大全,值得收藏

热门文章

  1. 龙兵名片直播商城v1.0.22 小程序直播 直播电商 分销直播商城
  2. C#:数据结构queue队列源码:循环使用数组头标,尾标,防止不停扩容数组
  3. 3t硬盘哪个服务器系统识别,关于帮你win10 3t硬盘不能识别的方式方法
  4. mkv格式如何快速无损转换mp4 mkv转换成MP4格式教程分享
  5. 兰亭集势发布鲁智深云ERP免费软件平台
  6. 为什么人民币升值不好?
  7. Coursera吴恩达《神经网络与深度学习》课程笔记(1)-- 深度学习概述
  8. 使用分区助手转移windows 10系统出现黑屏boot manager报错问题。
  9. 中科大研究生上岸经验帖
  10. 汽车分类——多元分类