android红包雨动画,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 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实现红包雨平移动画相关推荐
- android 从左向右平移_Android实现循环平移动画示例
实现用一张背景图做循环从左往右平移动画. 1.实现两个animation xml文件,一个起始位置在-100%p ,一个在0%p.设置repeat属性为循环,重复. android:repeatMod ...
- android 页面翻转进场动画_Android实现翻转及延迟动画效果
最近在学习安卓一些动画效果制作.做了点翻转和延迟入场动画的效果,并做了些封装.动画基于属性动画实现的,所以仅能在api11以后运行,不过现在应该也没有11以前的机器了吧...废话不多说,先上效果再贴代 ...
- Android动画学习记录二(属性动画、估值器和插值器)
Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) 一.补间动画缺陷 二.属性 ...
- Android平移补间动画,Android 补间动画之平移动画TranslateAnimation
Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...
- Android开发实战《手机安全卫士》——3.“手机防盗”模块实现 .9格式图片说明 数据库操作 平移动画
文章目录 1.手机防盗--密码加密过程 & 加密后的验证 2.手机防盗--对话框展示样式兼容低版本 3.手机防盗--设置界面 & 功能列表界面跳转逻辑处理 4.手机防盗--导航界面的布 ...
- android image 位移动画_「translateanimation」Android 补间动画之平移动画TranslateAnimation - seo实验室...
translateanimation 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 durati ...
- Android 抖音爱心动画,Android动画 - 仿抖音加载动画
在地铁中刷抖音,由于网络不通畅加载很慢,抖音会加载一个加载动画,感觉很有意思,于是分析了一下,自己写了Demo,实现效果. 效果图 分析动画 首先分析动画,初始状态是由两个相切的圆形图案组成. 将动画 ...
- ios 圆形旋转菜单_iOS高级动画:圆形树展开收起动画
转自:标哥的技术博客,作者:黄仪标(微博) 前段时间帮某某做了一个动画效果,今天分享给大家.关于动画的基础知识,这里不会细说,如果您还没有核心动画的基础知识,请先阅读相关文章,了解核心动画如何使用,然 ...
- iOS动画专题·UIView二维形变动画与CAAnimation核心动画
点击上方"iOS开发",选择"置顶公众号" 关键时刻,第一时间送达! 1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动 ...
最新文章
- python自定义库文件路径
- java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...
- 三个python文件怎么关联___name__= __main__怎么解释 怎么用 另外两个py文件之间的互动关联...
- 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
- sql里如何for循环
- Apache TomEE(和Tomcat)的自签名证书
- MS SQL 能否修改实例名称
- 利用python提取网站曲线图数据
- sql关键字_SQL关键字
- Spring之事务控制
- 2019年美赛获奖分享经验
- 【OP-TEE】TA的加载(超详细)
- Mybatis 异常(SQL 语法异常 ambiguous)
- cpptraj对于轨迹的浓缩
- domino服务器库文件,Domino 服务器设置程序 涉及的文件
- java玫瑰花代码_Java版给爱人表白的玫瑰花程序代码
- Python3制作二维码
- Unity的Bounds(包围盒)简记
- dp——洛谷P1240 诸侯安置
- excel高级筛选怎么用_excel:高级筛选技巧大全,值得收藏
热门文章
- 龙兵名片直播商城v1.0.22 小程序直播 直播电商 分销直播商城
- C#:数据结构queue队列源码:循环使用数组头标,尾标,防止不停扩容数组
- 3t硬盘哪个服务器系统识别,关于帮你win10 3t硬盘不能识别的方式方法
- mkv格式如何快速无损转换mp4 mkv转换成MP4格式教程分享
- 兰亭集势发布鲁智深云ERP免费软件平台
- 为什么人民币升值不好?
- Coursera吴恩达《神经网络与深度学习》课程笔记(1)-- 深度学习概述
- 使用分区助手转移windows 10系统出现黑屏boot manager报错问题。
- 中科大研究生上岸经验帖
- 汽车分类——多元分类