java如何实现红包雨,一个简单的红包雨实现

效果图如下:

25955ea799be

我的视频 1_20170207191503.gif

这个简单动画的主要思路: 将多个 红包View 通过 属性动画 从屏幕顶端 飘落到 屏幕底部。只不过在飘落的动画过程中,加入了一些随机路线 Path。

主要涉及到的知识点:

1.Path 和 PathMeasure : 了解PathMeasure 绘制路线

2.Animation :执行动画

绘制路线代码: 通过 Path.cubicTo 方法

public Path createPath(View parent,int factor ){

//主要通过 Path.cubicTo 方法,生成一个贝塞尔曲线

// cubicTo(float x1, float y1, float x2, float y2,float x3, float y3)

// 我们需要三个坐标点

int x = mRandom.nextInt(mConfig.initX);

int x1 = mRandom.nextInt(mConfig.xRand);

x1 = mRandom.nextBoolean() ? x1 + x : Math.abs(x - x1);

int x2 = mRandom.nextInt(mConfig.xRand);

x2 = mRandom.nextBoolean() ? x2 + x1 : Math.abs(x1 - x2);

x1 = x1 + (mRandom.nextBoolean() ? 0 : mConfig.xPointFactor);

x2 = x2 + ( mRandom.nextBoolean() ? mConfig.xPointFactor:0);

int y = mConfig.initY;

int y2 = mCounter.intValue() * 15 + mConfig.animLength * factor + mRandom.nextInt(mConfig.animLengthRand);

factor = y2 / mConfig.bezierFactor;

int y3 = parent.getHeight();

y2 = y2/2;

Path p = new Path();

p.moveTo(x,y);

//贝塞尔曲线

p.cubicTo(x,y ,x1,y2 - factor , x1,y2);

p.moveTo(x1,y2);

p.cubicTo(x1,y2 + factor,x2,y3 - factor,x2,y3);

return p;

}

执行动画: 路径长度 PathMeasure.getLength() 与 坐标点 PathMeasure.getPosTan()

static class FloatAnimation extends Animation{

private PathMeasure mPm; //计算路径距离

private View mChildView;

private float mDistance;

private float mRotation;

public FloatAnimation(Path path, float rotation, View parent, View child){

//路劲计算

mPm = new PathMeasure(path,false);

//获取漂移路径的长度

mDistance = mPm.getLength();

mChildView = child;

mRotation = rotation;

parent.setLayerType(View.LAYER_TYPE_HARDWARE,null);

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

// 第一种方式 View动画,不可点击

// Matrix matrix = t.getMatrix();

// mPm.getMatrix(mDistance * interpolatedTime,matrix,PathMeasure.POSITION_MATRIX_FLAG);

// 第二种方式 ,属性动画,修改View的坐标,才能点击

float[] pos = {0,0};

float[] tan = {0,0};

//通过getPosTan()方法,获得当前 mChildView 的坐标

mPm.getPosTan(mDistance * interpolatedTime,pos,tan);

Log.d("FallingPathAnimation","pos = ("+pos[0] +","+pos[1]+")");

//通过改变 mChildView 的x,y坐标,才能点击

mChildView.setX(pos[0]);

mChildView.setY(pos[1]);

mChildView.setRotation(mRotation * interpolatedTime);

//缩放

float scale = 1F;

if (3000.0F * interpolatedTime < 200.0F) {

scale = scale(interpolatedTime, 0.0D, 0.06666667014360428D, 0.20000000298023224D, 1.100000023841858D);

} else if (3000.0F * interpolatedTime < 300.0F) {

scale = scale(interpolatedTime, 0.06666667014360428D, 0.10000000149011612D, 1.100000023841858D, 1.0D);

}

mChildView.setScaleX(scale);

mChildView.setScaleY(scale);

//渐变

// t.setAlpha(1.0F - interpolatedTime);

}

}

“红包雨”主要就是上面两个步骤,很简单,上面已经注释的很清楚了。主要还是对 Path 与 PathMeasure 类的 熟悉和使用。

源码在这里 : https://github.com/LuoboDcom/ApiDemo

欢迎大家留言和展示更多酷炫动画,我在这里做个抛砖引玉的作用,哈哈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原】基于Windows Media Player, 写自己的播放器【有源码,可下载整个工程】

最近有客户问我&#xff0c;怎么把Windows Media Player 嵌套在自己的项目中。 以前我在Delphi下玩过Windows Media Player&#xff0c;可是在Microsoft Visual Studio 2008 没有测试过。 到网上搜索了一把&#xff0c;果然得到很多例子。 其中CSDN上有个例子写的不错&#xff…

Oracle数据库php短连接,PHP 连接 Oracle

起因由于项目的数据库需要用客户购买的Oracle数据库&#xff0c;所以需要php安装oci扩展。运行环境php : 7.2系统: windows10oracle: 11gR2安装相关环境由于php的oci8扩展还是需要使用到oracle的一些包&#xff0c;所以先下载这一些。下载完成后解压缩这个压缩包&#xff0c;并…

计算机考研文章精选[转载]

今天在网上看到了一篇超全的计算机考研文章集合&#xff0c;里面有很多曾经看过&#xff0c;挺经典的&#xff0c;于是忍不住收藏下来&#xff0c;希望对那些即将报考计算机研究生和工作了仍不放弃考研的朋友有所帮助 计算机考研常见问题解答 地址&#xff1a;http://ww…

PHP鼠标滑过变色命令,WordPress鼠标悬停变色的修改方法

原创内容&#xff0c;转载请注明出处&#xff1a;https://www.myzhenai.com.cn/post/3253.html关键词&#xff1a;wordpress 鼠标 悬停 变色我总是觉得我两个WordPress博客的主题里使用的鼠标悬停变色的颜色不太喜欢&#xff0c;就是当鼠标划过或停留在某一个链接上的时候&…

圆面积异常

package zengliang;import java.util.*;public class Suv {public static void main(String[] args) {// TODO 自动生成的方法存根try{double r,s;final double PI 3.14;Scanner scnew Scanner(System.in);System.out.println("输入圆的半径&#xff1a;");r sc.ne…

SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

在实际的运用开发中&#xff0c;跟数据库之间的交互是必不可少的&#xff0c;SpringBoot也提供了两种跟数据库交互的方式。 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板类&#xff0c;JdbcTemplate提供的方法进行增删改查的操作。 首先需要在pom文件中添加依赖:…

Processes

转载于:https://www.cnblogs.com/EMH899/p/10844709.html

[html] 说说video标签中预加载视频用到的属性是什么?

[html] 说说video标签中预加载视频用到的属性是什么&#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

CodeSmith 5.0工具实例篇系列4——根据表生成修改的存储过程,针对MS Sqlserver

运行该模板时&#xff0c;只需要选择单个表即可。 申明&#xff1a;该系列案例已通过CodeSmith Professional 5.0.1 Revision 4983版本的测试&#xff0c;以及生成的存储过程是针对MS Sqlserver。 操作说明 &#xff1a;运行CodeSmith Studio工具 &#xff0c;创建Blank Templa…

差分放大电路单端输出和双端输出区别以及应用(转载)

来自&#xff1a;http://www.elecfans.com/news/dianzi/20171118581901_a.html 什么是差分放大电路 差分放大电路利用电路参数的对称性和负反馈作用&#xff0c;有效地稳定静态工作点&#xff0c;以放大差模信号抑制共模信号为显著特征&#xff0c;广泛应用于直接耦合电路和测量…

Flash 缓存问题的解决(转)

Flash 缓存问题的解决 作者&#xff1a;wangwaizi 时间&#xff1a; 2003-12-27 文档类型&#xff1a;翻译 来自&#xff1a;蓝色理想 原文是Flash支持中心的两篇文章.解决Flash缓存问题 | 解决载入变量缓存问题 使用以下的方法&#xff0c;使SWF文件强制不从浏览器读本地…

matlab可以使用词云分析吗,利用豆瓣短评数据生成词云

在之前的文章中&#xff0c;我们获得了豆瓣爬取的短评内容&#xff0c;汇总到了一个文件中&#xff0c;但是&#xff0c;没有被利用起来的数据是没有意义的。前文提到&#xff0c;有一篇微信推文的关于词云制作的一个实践记录&#xff0c;准备照此试验一下。思路分析读文件利用…

第一阶段冲刺08

1、整个项目的预期任务量&#xff08;任务量所有工作的预期时间&#xff09;和目前已经花的时间&#xff08;所有记录的‘已经花费的时间’&#xff09;&#xff0c;还剩余的时间&#xff08;所有工作的‘剩余时间’&#xff09;。第一阶段工作预期任务&#xff1a;完成整个App…

matlab中腐蚀图像的编写,Matlab实现二值图像的腐蚀算法源代码

标签&#xff1a;1、二值图像的腐蚀原理&#xff1a;我们知道&#xff0c;二值图像就是0和1组成的矩阵&#xff0c;0为黑1为白&#xff0c;腐蚀作用在1上面也就是图像高光白色部分&#xff0c;然后白色部分往外收缩。腐蚀就是类似于黑色军队反攻白色军队&#xff0c;最终把自己…

第五次实训作业继承

1、实现如下类之间的继承关系&#xff0c;并编写Music类来测试这些类。 2、编写一个Java应用程序&#xff0c;该程序包括3个类&#xff1a;Monkey类、People类和主类E。要求&#xff1a; (1) Monkey类中有个构造方法&#xff1a;Monkey (String s)&#xff0c;并且有个public v…

Chrome 过滤广告插件暂替办法

由于Chrome暂无广告过滤插件&#xff0c;我们只能通过其他方法是实现Google Chrome的广告过滤。 这里我们需要用到Privoxy这款软件&#xff01;由于Privoxy是通过本地代理来实现广告过滤的&#xff0c;所以用chrome也通过Privoxy实现广告过滤。 Privoxy是款免费软件&#xff0c…

JavaScript调用WebServices

经过几天研究&#xff0c;终于可以再单个js文件(纯JavaScript&#xff0c;不涉及AJax控件)调用WebServices了。现将调用方法及注意事项分享给大家 1、WebServices文件源码WebService.asmx usingSystem;usingSystem.Collections;usingSystem.Linq;usingSystem.Web;usingSystem.W…

oracle11g和12c安装区别,Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)...

oracle下载与oracle安装图解(oracle19c,oracle18c,oracle12c,oracle11g)1、oracle下载(oracle11g)oracle下载方法&#xff0c;请根据以下步骤与图示来下载oracle11g版本&#xff1a;oracle11g下载第1步&#xff1a;打开oracle官方网站oracle11g下载第2步&#xff1a;打开菜单-支…

nodejs+supertest+mocha 接口测试环境搭建

系统接口自动化测试 该框架用于对系统的接口自动化测试&#xff08;nodejssupertestmocha&#xff09;Homebrew 安装&#xff1a; ruby -e "$(curl -fsSL {}https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装nodejs&#xff1a;brew instal…

初探postman

第一种&#xff1a;安装postman 扩展程序 第二种&#xff1a;本地 安装postman 登陆进来postman的界面 发送第一个postman请求 将请求保存到集合 未完&#xff0c;待续... 转载于:https://www.cnblogs.com/smart-girl/p/10865386.html