Github 项目:https://github.com/JantHsueh/EmojiRain 为了后续能及时看到更新,建议star一下,欢迎issue
微信聊天中的表情雨效果一样。
相比于其他项目的优点:
先来看下效果,太阳雨。(gif有点卡顿,因为录制屏幕时的帧率不够,在项目中是很流畅的)
在项目的build.gradle 添加引用
implementation 'me.xuexuan:emoji-rain:1.0.0'
//为了减少版本冲突问题,库中没有引用constraintlayout,所以在自己的项目添加引用
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
例如:在布局文件中使用
<me.xuexuan.RainViewGroup
android:id="@+id/testView"
android:layout_width="match_parent"
android:layout_height="match_parent">
me.xuexuan.RainViewGroup>
它是一个viewGroup,继承ConstraintLayout。所以可以把它当做ConstraintLayout来使用
获取到RainViewGroup的对象实例(例如:在java代码中,通过findViewById 获取)
调用start(),开启表情雨
rainViewGroup = findViewById(R.id.testView);
rainViewGroup.start();
调用stop(),关闭表情雨
rainViewGroup.stop();
项目提供了一些函数来实现自定义的效果
setImgResId(mImgResId: Int)
setScale(scaleRandom: Int, scaleOffset: Int)
默认值是 setScale(30, 70)
在代码的实现var i = (mRandom.nextInt(xxxRandom) + xxxOffset).toFloat() / 100f
例如:setScale(30, 70)
那么i的取值范围就是[0.7,1)
屏幕最多的表情数量,以下简称单屏数量,可以理解为,表情雨的密度
setAmount(num: Int = mAmount)
默认值是 20
这里的次数,是指上面设置的表情数量的次数。在保持密度不变的情况下,设置下落数量。
setTimes(times: Int = INFINITE)
默认值是 1
例如:
表情密度 | 表情数量 | 下落时间 | |
---|---|---|---|
A B | 相同 | A = 3*B | A = 3*B |
A C | C = 3*A | 相同 | A = 3*B |
B C | C = 3*B | C = 3*B | 相同 |
设置x/y轴的偏移,每一次onDraw(),在上一次位置的基础上,在x/y轴上增加的偏移量。
setX(xRandom: Int, xOffset: Int)
setY(yRandom: Int, yOffset: Int)
默认值是setX(6,-3)
setY(5,10)
在代码中的实现var i = mRandom.nextInt(xxxRandom) + xxxOffset
例如:setX(6,-3)
, i的取值范围就是 [-3,3)
设置表情初始位置,x值的范围,也就在屏幕宽度指定的范围内落下。避免表情x = 0(x = 屏幕宽度)时,xOffset为负值(正值),落下很小的距离,表情就划出屏幕的问题。
setWidth(widthRandom: Int, widthOffset: Int)
默认值是setWidth(200,100)
在代码中的实现var i = mRandom.nextInt(getWidth() - xxxRandom) + xxxOffset
,
例如:屏幕宽度是1080,setWidth(200,100)
, i的取值范围就是 [980,100)
Copyright 2020 XueXuan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.