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…

[html] 说说你对cookie和session的理解

[html] 说说你对cookie和session的理解 cookie: 可以通过客户端, 服务端设置, 容量小, 可以通过设置domain来实现同步登录, 除了name, value, 它还有多个选项, domain, path, secure, expires, 客户端和服务端可以通过cookie来通讯, 传递信息session: 由服务端设置并发起, 是服…

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

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

java的内存模型--jmm

java虚拟机运行时的数据区 1.线程共享区&#xff08;方法区&#xff0c;Java堆&#xff09; 2.线程独占区&#xff08;虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器&#xff09; 程序计数器&#xff1a;记录当前线程所执行到的字节码的行号转载于:https://www.cnblog…

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

今天在网上看到了一篇超全的计算机考研文章集合&#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…

[html] html5哪些标签可以优化SEO?

[html] html5哪些标签可以优化SEO? 跟标签语义化有关&#xff0c;从上往下&#xff1a;meta titlenav header main article section aside footerfigure picture time video audio个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持…

sql语句的效率

1、尽量避免反复访问同一张或几张表&#xff0c;尤其是数据量较大的表&#xff0c;可以考虑先根据条件提取数据到临时表中&#xff0c;然后再做连接。 2、尽量避免使用游标&#xff0c;因为游标的效率较差&#xff0c;如果游标操作的数据超过1万行&#xff0c;那么就应该改写&a…

php跳转分站,PHP判断IP并转跳到相应城市分站的方法

本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;class QQWry{var $StartIP0;var $EndIP0;var $Country;var $Local;var $CountryFlag0;// 标识 Country位置// 0x01,随后3字节为Country偏移,没有Local// 0x02,随后3字节…

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

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

[html] webSocket怎么做兼容处理?

[html] webSocket怎么做兼容处理&#xff1f; Socket.IO:Adobe Flash Socket&#xff08;缺点&#xff1a;需要在服务器上打开一个额外的端口&#xff0c;默认为10843&#xff09;Ajax long pollingAjax multipart streamingForever iframeJSONP polling个人简介 我是歌谣&am…

农民第六次拯救中国

农民第六次拯救中国 英国《金融时报》中文网专栏作家吴晓波 2008-11-18 1989年&#xff0c;我第一次行走中国。在此之前&#xff0c;我是一个成长在江南城市里的文学青年&#xff0c;我只读到过课本上的中国&#xff0c;在用5个月时间踏遍南部中国之后&#xff0c;我在社会底层…

java base64转bitmap,如何将Bitmap位图与base64字符串相互转换

先引用delphi自带的单元uses EncdDecd;然后就可以使用下面二个函数了:///将Bitmap位图转化为base64字符串function BitmapToString(img:TBitmap):string ;varms:TMemoryStream;ss:TStringStream;s:string;beginms : TMemoryStream.Create;img.SaveToStream(ms);ss : TStringStr…

剑指offer——用两个栈实现队列

题目&#xff1a;用两个栈来实现一个队列&#xff0c;完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路&#xff1a; 当stack2不为空时&#xff0c;在stack2中的栈顶元素是最先进入队列的元素&#xff0c;可以弹出。当stack2为空时&#xff0c;我们把stack1中的元素…

[html] 解释下什么是ISISO8859-2字符集?

[html] 解释下什么是ISISO8859-2字符集&#xff1f; 这个知识点在非科班的来看算是比较偏门的了。 查了一下才知道&#xff0c;原来是Ascll扩展部分的字符集。ISO/IEC 8859-1&#xff0c;又称Latin-1或“西欧语言”&#xff0c;ISO/IEC 8859-2 Latin-2或“中欧语言”&#xff…

常系数线性递推的第n项及前n项和(转载)

&#xff08;一&#xff09;Fibonacci数列f[n]f[n-1]f[n-2],f[1]f[2]1的第n项的快速求法&#xff08;不考虑高精度&#xff09;. 解法&#xff1a; 考虑12的矩阵【f[n-2],f[n-1]】。根据fibonacci数列的递推关系&#xff0c;我们希望通过乘以一个22的矩阵&#xff0c;得到矩阵【…

Processes

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

linux java 进程jvm 挂起,【jvm】jconsole远程linux上的java进程

1、启动java进程的命令在启动命令中添加如下信息-Djava.rmi.server.hostname192.169.1.71 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port10099 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse说明-Djava.r…

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

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