From a98bc1ac9ed1df90727d7f6a729be721c1d6e628 Mon Sep 17 00:00:00 2001 From: Evgeny Shishkin Date: Mon, 26 Dec 2016 13:52:27 +0300 Subject: [PATCH] Prepare version 1.1.1 --- CHANGELOG.md | 5 +++- README.md | 7 +++--- .../src/main/res/drawable-hdpi/snowflake.png | Bin 1212 -> 1292 bytes .../src/main/res/drawable-mdpi/snowflake.png | Bin 716 -> 749 bytes .../src/main/res/drawable-xhdpi/snowflake.png | Bin 1821 -> 1964 bytes .../main/res/drawable-xxhdpi/snowflake.png | Bin 3294 -> 3525 bytes .../main/res/drawable-xxxhdpi/snowflake.png | Bin 4980 -> 5463 bytes .../src/main/res/layout/activity_snowfall.xml | 7 +++--- .../jetradarmobile/snowfall/SnowfallView.kt | 23 +++++++++++------- .../com/jetradarmobile/snowfall/Snowflake.kt | 6 ++++- snowfall/src/main/res/values/attrs.xml | 3 ++- 11 files changed, 33 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d11ed4..169f3cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,12 @@ Change Log _2016-12-26_ - * Fixed lags. + * Support different start position on y-axis for snowflakes (attr `snowflakesAlreadyFalling`). + * Rename attr `snowflakeFadingEnabled` to `snowflakesFadingEnabled`. + * Fixed animation lags. * Fixed API 15 support. + ## Version 1.1.0 _2016-12-25_ diff --git a/README.md b/README.md index a8c50d1..54d8ba7 100644 --- a/README.md +++ b/README.md @@ -55,14 +55,15 @@ Fully customized implementation: android:layout_width="match_parent" android:layout_height="match_parent" app:snowflakesNum="250" - app:snowflakeAlphaMin="200" - app:snowflakeAlphaMax="250" + app:snowflakeAlphaMin="150" + app:snowflakeAlphaMax="255" app:snowflakeAngleMax="5" app:snowflakeSizeMin="8dp" app:snowflakeSizeMax="32dp" app:snowflakeSpeedMin="4" app:snowflakeSpeedMax="12" - app:snowflakeFadingEnabled="true" + app:snowflakesFadingEnabled="true" + app:snowflakesAlreadyFalling="false" app:snowflakeImage="@drawable/snowflake"/> ``` diff --git a/snowfall-sample/src/main/res/drawable-hdpi/snowflake.png b/snowfall-sample/src/main/res/drawable-hdpi/snowflake.png index 7a9b05c6f413ce3b2dee88c54c9973ef28d761cc..f775ffb7f8cf7fd592128017da4b44234272a62a 100644 GIT binary patch delta 1256 zcmVl(d5W?ul`4QczC$GRqpQY?%`JaR_tbhTZ!k`srd)X`s&{=@%#4y_AH>K z>Dr_o#n}AUE$;U1ZUN)J2pVDuxhlHFDDRyynhiGc{{bA1$6~z2U7#~ z<577vTh}K1>XUu#!?D)n1?KPZ0s4J330%(?_6pFft_?q(XMotxMn4+0PV5E3I#9;X zXWxwi@z<_nHjo=oED7AYQ?~%gB>@WzK(V3e3J4JSY;P2>MD9PM*03XQ12pzZE&wg# zvYCE9`o-wiyMM-#eJdc$0Z=^*+2;U%i~{-RX!`)V3916KeuxvaQ6pf!8~uLtt5ItK z20~L76RhT#u$PDd10WFF+r}RP_!px)18Ph)RV0SK9iIY#xpM3Y3?Do0j&*V1jf{%h zOExfL0XyEj1JFJ$iGgym#`ewl7{Zi0rD)95SaVY2e1G)-F}fc{e;g%P1ZuN^IsnNS z35+-}?hJ;qM#g82gxV7r>`?nz4Od^TIO~(}+i3S`yHmFSP0m)tCJh7Ey*XQ8sJo*m zhFA;&FOD4tW4{~)RQ*`uZ?XZ}$0b;E#S~y0(faxqYtN)@jbq2N{XMgk#0YRk30wf* ztqfJXSAX5RhJ#=|NiR)GM-2Afu|XRNJ?6=O59E`Kz@hiF0+%69^4B;scP6WW?&HB44t z%(I4+Z*0AVo?9RHQ3Bzq#%nBa)@>#gT5a)~XM2NO-hTc4jJQW^>+JTmUYiSQ;sh*e zyNJ>2**J`mZ@=aVzuexYzS01=%)gET1fZDw4seX=2+X1alCfiBrx7kZK99!>rMNMj%X^5r(RP89gYf&squ*l27nGjIR}I6I*yIT$*DQpkN#zy*&b zj99}2packcVx4~64U}hbqX$afd*7k$Z`=KigI*!c0m9HvqW~!yU`${tkk-T!HGho9 zJ@lfeC1wxR=RyvKik_INV86;L+fJjo zrmUtETiu%#kS4JdAa&#b7Bg31X6^W%@K>pjm~pt=1Q4L8!^o?Vrs=qc04J|8$qCHy zK`i?vhAJdqA$P={elDzQxSm?xDq%$ESbS58zYu(t8n5=?kzz0qXhYiI2tibp8b)@hp+| Si<-p%0000Lks!)}X zx?7Li>ak;PFaM+5@AunPx!dh_zuLdryDV@Oc-}iTpLM1`LGJ$sY$l(3zKo_5dIhw@)PVhZsYW%M zXKVXKjd{)w=FjB=`m{6&uJx0B1+-3QL+60lZ+71~38M4h*&zN{J}3fm12rXbHK{A0 zEm-`n!2sensVgAok8Y2+wcP5M3UF54VwU?XPe9|jBvTOIF8#P`Q*suN8m(DkLcc9_ z=D7fvRyo#}P=8NAD~Py3i5h_UVd+o1Z%-Z-2a+vMBhM6^GcYdZ4D1H92Ec!Mx-(GE zq=gi#R0+mlTm}M8&m!G@?Xn!t&S5PMO^R7K1t7(np z5lw&JyoYb!gg}D$Whnt@z1g4+AQ4N>FmChR(jb7Dj(=%6qfKbJ$0R^D6@HD?=d-~3 zzP2Y^>usEDB9PQXF+Ok_1i-XQ^nI9yrl#aF_VWSQ3#uvA_W`s&mrcz$CofHgH0&*yhk@#V<7e|Y1$Y6wJ8YYnnN zgW+$*hPAIb7>&hfY|XZo_ap+Q2(YIh1!0|4EUg%8&$F=BX-}E$BkrldIy*!GQc->l zyZLP5oK&Pn(>@{||Fy4ajRDaa&p%{Ns9OaoD1SJ9iL;5E)@%*uB>HxIH=Z%=*TVtq zU;ha-Z&4G46_Bhj3&OW#-?Pd~#QSK)vSRv(vlC1`Ir`D<`(Tfa<#!{~QDiCrq9_5= zbE^?F5RI(UfT|Zv6I!7Q$e76T9SAZtN%r_4SgN^3J*#H+NI=fjX*z0IQ}Jg|eUHDj zHGd(BO{jiP_^^ZVlLju(BH9>KTYgi+;Mr^gj^i9c`aclXIrwO$=Y)up}83nr?z<`_;8^qe$&I5WYMt|HP zZvoAsp21`Y7?Ys^)d*0!+(W9>Ma0-6$1lXk^5V%l*sVl`h(h3cI*_wjzPKqz^R*ew zIp&D(=Euf#PJg_KoiG!q2H7B<%I%Be%=bD2`0oM<*rAFQU(N)Yg{Lp?kSl=WaCa(x q-hZ_oV4Vfj`ssg(kInz+{0;D|HW9QNk936q0000fpG=HQ?L_t(Y4UN`WZxcZf1mHNB`vwVk;Q#+RZo*}ZO?{)O)o#KA zBbBD7x2LL)T_?MX|5)eq`BKwRHoafb3pUv}T+igxclKEywQpTRN7jVfa=tAWEYv*$x}f9`DLh=1$99UD2~&l6XvfN!%F zfff0KL_7|j2akdZiM=;L?04`fU?V<+Lz^}ti$DS_=exnv;MD|M=CZbXZg$@Tf~wFa z@Dgl>z7}ZTU3wC{4&DYY162_K86){R&n5pg{bT468uJ(evpspfR6szBRPiRLfOy$! zkJg=ot3Wk;$bTiuH-^5S5{ z=zT9AVq1R#wo2H95rf$*?=vA8t}|zs7R&@r5#i+=R9Em}?gVa4BD53GoOTYyV z7koVLg1%Af;S#YLFChZ%X;E$G(V}$)1O&*S10w?cpbT5)V%xg*-rauD3weAOdn!Kb zEDw|_Q-7Ij5qO)Bnt>P@I=5AlYTx-_Sz`t(5f^3hC3qkB7Q9^uEYH{~F%OlP!H0lf zB^!|rxql7`v=W2X9v9lC4wS$sJG+V`q!J0-tRT*@W+em!sz9*I{oRov5iwn==nU-R z_3T4^-K@+*RnQO5pq+^!mi=0QA5=ePBhlDn{XR=TZ;Oic{V!2TC(YOf>6)DPh5)CZ r@Y${kRlwu%-^2WwcOL6Has7V*7UDC;YnzfD00000NkvXXu0mjf9mG>Q delta 676 zcmV;V0$cs<1ShJ zE?i!LklA}0Sa%QcpWttBPI05l#GCB|X7w&3dN#cn`R#tme}Cl+9@BxnooxaOIpP<= ztLd%f5fFp;6#NK22Z&GMFs7ZzCXfW?qP>^FyNTCxPbba@=;-&1ji{ipd-PSHbFaYr zT>KdDIhO5`dA^9Mrqb)Zu7XW|MF zvtCCwNV7MTT~=jDc_N4_D#v)*iI@QV488~b%Ep_j`gS}>jfVh17vv#tzG|&k5FMoP zo7rRzBqQ?%fUM_cj1@hN`W0n^m4MeeNPp}Y6ww@WE;<_H5fgIfynUuw zsHhL*`~DUfli3@S?woh_$bFv3kb-->4iu6P^l~tUwolas7Mq>8tP28?UG^1;*AZnotncSc2jla+9$njSym}%X1@B!5*e?$~HD^cV1?jSaWb@NWZA(1(*3h})-z8&vb$i{U`+=G8@8acb^T+q${0000< KMNUMnLSTZdH%3VS diff --git a/snowfall-sample/src/main/res/drawable-xhdpi/snowflake.png b/snowfall-sample/src/main/res/drawable-xhdpi/snowflake.png index c14246ff10559d3a2172e65155da46b4c0bd4810..56b9082d1d127515409a5f2ba715fd2c9c20446e 100644 GIT binary patch delta 1935 zcmV;A2XOeE4y+H5Gk*tTNkl2jk*429td4Et8x|5XCT4hj8q{2Jwp?RfZs zs(PfB)Y3WXwv)iayZ=F+o}M0VwRw1Wc)At86}wsZ*1==!3doN}-n4T+W}NinhmyIA zzyaJPAo}0(zdrzN``5`pBr;pyOXOPN8vGX>5qhpmwZs9QM1L;jUG?3(fid}jD8we0 ze9w{RnBkO@U7QX$@PDjD=Ue8xyPnfqH*f@NADF;tHuLPsr)wFI7`uER1N!kPw$zRz zQY|@e%2fhm`idwTaA2}&AbpE;n==Mr1R?{Nd|>}P=`WZ5ZLP@N1%BmkAoL|^VgUdQ z_|MkL4q%{x%zqa9Q0Z~DMH!{*CR z6aH@Cmu2(2iGaG9z^99?&}(@`;E+<0CJ+2~Yazo%0)J?6y5*eO_Swta(l<`My?sx~ z=K|P1$N_&`Lq&Sa@i|qbcsk(X<l>s!1msKpvCe#+cQJJtZU#c z=R?3#QtL>d+D(s^16)2&32?+MqNe`kvLmqxtbhI15{@!~i&x0x*e0!!#@&j%>6hE| zdpa7LvRpn|4Ss-|c+bi+>V^=MFBgUle(CL;&u4-Upn||@!bf{Dw5LQD6ITQHrWpa? zEfRoEe$w?&|2 zBoMHA>wwz_xZDYv-4j~oS%4(sq%$+WbAS2L&nGVY`~LL(AEO8a5LiUK|G?WfX$`E- z12EUxZV8x8@y^iI5X7D*18fJxFmxPNYp4Xh8jXT_Eq0lH^K+XEPApn#nVXt&Vxe>&N2 zLG4MCrieg*CJA;EFYXLKOr59C^4{;% zOE>}T0K0c7*<||azqxYbQWL_-qzG|+M^wy9d`r^VE^r|pRxcG&o~M4rtJ}s*Y8F^^2?u}1%AK-Pm_AkK+EfU z-W~x@ z=Jbu^kf{^`@hWU~60Y@4*3pjb=0S)+aZBSyCJhc!&q?^d=HI$}0lnCcJwR0Y&*V zBANm2YZP#?G*B9wqVqKH>?!j2)JCGgMEID$QeMg{0)Yy~V}GyxEB4cPpi5`YM( z*BSW%0W3c~1u?nE(0_i7V0ROpTdvn~mB1kt&;Vz<2{)jDn1w`>1|D$v-N-U`oF;)Q z2Z7EPqp!+a1UgJ>V$y&D$ETqhJtHxGOHP33{L4HGAHayun*8(3)&Jr57J*e~i-HKy zKsr|w`#!+SJOgd2^DO(4@E5DkJa_5L_T5Wh7N{^ETMbXdbAKXyrg{m8*flBEIeGc6 zo!M7+HCW*EUoLE${HkIJ3D%PDHLkV1kU|!Ri12 delta 1790 zcmVGk*ruNklYK z4HTh~EbDTP?W`Gi`SK6Q>+9>wvoS9(FR#z`pY1(u{H*Z2_WB9YnlvqZk$_xr!BBEn9+YHlCkNq^)j?_sQAmkHzK10t`Q zt5|*PIrVb#+h+p~{2xo%V$1#Vsps_34V=NAfz5qGTl2rWt;MDfWIzMGLc11`ddT@u z9ugR*uZgCeA~5+`!x~(S&A%c5Y`WYpzb}p4r@$+ENMP*&lm?nr16Z+1Zu&DPBKDm+ z1^Bn6Nc^%i@PEsFdrs>R`Cp!W(9a0$V)aV_2v7vrNG$g_?ZDcj>e(qh6-0>r2#Ben zAKt_}0^{ji0hj;%QUm|9^xsPZIP;6035Wv^5`buP^Y4 zJ@MqY34!y6-LR6UtqBWEC-2k&MkE4kIr7wG`7{FJKmx57VXdj&_6fpNZ}pK`?wfxQ z7$2|AB!5s@!wqw4k+4QaFDf?$JOKniF#uC*z1lB_)lXb5OEw93{k$Fo-uCvN8lJW1 zV^HAvP9A}umqq}|2rPGt;i=zzA8l)Oz|I;m7{nqJiEd%rj|gZ`qeulXz*)q)p>kJf zpIBf!Rm0V(;j`TcpI8Szf^zlV;FsM^d>DeH!GA0;G++~`(|7V`E2gIUUeha)RKv(*4X4)KN_*Dr1#*STpqR7pTcz~Hc5cl3M=kZ z=YMnI(?HDAZ=iYtpy9xYb*d4P-^ng_pFSL((f^jpk3b~s)4M0M)&~)Z5inpr6@I|8 za%pwh7249tTgW3bADFGe(kyb^`>dOko#CO_bF2!BdzfPnA$6n~GDIJNFun0D^3l)vRnAm(M9!JXIT8Jq;F z*m+$ZYcJs0zKzz^m(LzD37o+plXTh<>;&5nh@t1xmLvX1J82)SpHCki}4LVzZ8(<(oFtU*=N3S%108_s@G~d45tRCTG_q%2jp!dctV6BKu_J8?u z&->O0*z2b115CB@&T3E2j9cq9buHgy-as){a?F8nBAyX-LiYVCS@Zn^%^Cn}HEF#f zp_krMop7hl>c^HFX}$P|OaeA3_QakcfB+o<%{2kIdUgWNU*X*|@GP)q=siz5UtAsy zu)XlHhkW&KYO*4RR>0TDFybT-@PDrP_L1^4tA?%qOvXL{k(fZum_*DAgS_^Nv0M6I zEuCNqKo~?618W^Pz8ZtN5rf3+Arfglr$#~^Uml$#@;c) ze8b&}I7{r2Ih5ZzBK2zBexUUTG&|$=woC#g)X>_=TeC?YtJ9_icLOXUYJbJm^0WN8 z=NTe0Z$mDfgw$;5>9pPiZr?%Aq-0IR0Af=gu^dDYkS7NS{pvG;07FT@SWi?QB9W*r zqHMa{d)Wl;Lp!-p!{qU6&h`WXuf`z4+E+vQBp_LFy?|%SZ-0f3p8R)m5a?>&evo#N zlOzBJSgfB>Z{6B07}!U>+<(2E!1!070__IeMo+54LFlS(h2P{LP+-^!*-pklYJgMg zR|-kJ*y`lTQ5#Tu$?U72UTOKwt!K4|eMey2L^seNO~rsBPAlNzQv)qmeU?8(o>(WI zjlem7)^7hDfii9%wgxmnKsu$!i1(9fZ{7ef0pZu{49dDZ*1_nDw10JV%Y82o37k?j z1dz=)Ai(qV8)!J-)v#m|D7TymxV@SG)?xhl5rK+XLjVG{LG1Y%HQ3(FE55>q6g&46 zuXgA3w2#W0^AUmaH9>$itdlpyx?iN_9#`I}&RYJJh_~0AS$9>lW1l538`M~gkBp%# z5i94)-$@sL$R!cr7kA@diqrd0*53`~b^2=Z*|{I+tX!ayN1)E}WBus)X!xx+peZl` zp1>k9V}W4vm-|pYlXF)bkh|d3V%$R80dCETO%T(!e_o5-$+OeGOS~;UP2gO7LFk-v gtiKi1QTPexFSQ_57DRisWB>pF07*qoM6N<$f(uQ5x&QzG diff --git a/snowfall-sample/src/main/res/drawable-xxhdpi/snowflake.png b/snowfall-sample/src/main/res/drawable-xxhdpi/snowflake.png index 3851e9c21c40d750acfb1b71acc8d37364aa1b77..87ebfcf2953cdbc23d6c39a058d1f0e559aa2638 100644 GIT binary patch delta 3508 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 JPDHLkV1jW?$nXFF diff --git a/snowfall-sample/src/main/res/drawable-xxxhdpi/snowflake.png b/snowfall-sample/src/main/res/drawable-xxxhdpi/snowflake.png index 6933d11ced797eab57db6a73726312279c7c67ce..db0b9775043a659dbc8001a50b588ca46caa8f97 100644 GIT binary patch delta 5461 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 LNkvXXu0mjfvquqm delta 4974 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 diff --git a/snowfall-sample/src/main/res/layout/activity_snowfall.xml b/snowfall-sample/src/main/res/layout/activity_snowfall.xml index 5d30849..a18d1c2 100644 --- a/snowfall-sample/src/main/res/layout/activity_snowfall.xml +++ b/snowfall-sample/src/main/res/layout/activity_snowfall.xml @@ -11,14 +11,15 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:snowflakesNum="250" - app:snowflakeAlphaMin="200" - app:snowflakeAlphaMax="250" + app:snowflakeAlphaMin="150" + app:snowflakeAlphaMax="255" app:snowflakeAngleMax="5" app:snowflakeSizeMin="8dp" app:snowflakeSizeMax="32dp" app:snowflakeSpeedMin="4" app:snowflakeSpeedMax="12" - app:snowflakeFadingEnabled="true" + app:snowflakesFadingEnabled="true" + app:snowflakesAlreadyFalling="false" app:snowflakeImage="@drawable/snowflake"/> \ No newline at end of file diff --git a/snowfall/src/main/java/com/jetradarmobile/snowfall/SnowfallView.kt b/snowfall/src/main/java/com/jetradarmobile/snowfall/SnowfallView.kt index 7f340a1..0325513 100644 --- a/snowfall/src/main/java/com/jetradarmobile/snowfall/SnowfallView.kt +++ b/snowfall/src/main/java/com/jetradarmobile/snowfall/SnowfallView.kt @@ -35,7 +35,8 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) private val DEFAULT_SNOWFLAKE_SIZE_MAX_IN_DP = 8 private val DEFAULT_SNOWFLAKE_SPEED_MIN = 2 private val DEFAULT_SNOWFLAKE_SPEED_MAX = 8 - private val DEFAULT_SNOWFLAKE_FADING_ENABLED = false + private val DEFAULT_SNOWFLAKES_FADING_ENABLED = false + private val DEFAULT_SNOWFLAKES_ALREADY_FALLING = false private val snowflakesNum: Int private val snowflakeImage: Bitmap? @@ -46,7 +47,8 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) private val snowflakeSizeMaxInPx: Int private val snowflakeSpeedMin: Int private val snowflakeSpeedMax: Int - private val snowflakeFadingEnabled: Boolean + private val snowflakesFadingEnabled: Boolean + private val snowflakesAlreadyFalling: Boolean private val snowflakes: MutableList private val updateSnowflakesThread: UpdateSnowflakesThread @@ -62,7 +64,8 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) snowflakeSizeMaxInPx = a.getDimensionPixelSize(R.styleable.SnowfallView_snowflakeSizeMax, dpToPx(DEFAULT_SNOWFLAKE_SIZE_MAX_IN_DP)) snowflakeSpeedMin = a.getInt(R.styleable.SnowfallView_snowflakeSpeedMin, DEFAULT_SNOWFLAKE_SPEED_MIN) snowflakeSpeedMax = a.getInt(R.styleable.SnowfallView_snowflakeSpeedMax, DEFAULT_SNOWFLAKE_SPEED_MAX) - snowflakeFadingEnabled = a.getBoolean(R.styleable.SnowfallView_snowflakeFadingEnabled, DEFAULT_SNOWFLAKE_FADING_ENABLED) + snowflakesFadingEnabled = a.getBoolean(R.styleable.SnowfallView_snowflakesFadingEnabled, DEFAULT_SNOWFLAKES_FADING_ENABLED) + snowflakesAlreadyFalling = a.getBoolean(R.styleable.SnowfallView_snowflakesAlreadyFalling, DEFAULT_SNOWFLAKES_ALREADY_FALLING) a.recycle() snowflakes = ArrayList(snowflakesNum) @@ -70,11 +73,6 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) updateSnowflakesThread = UpdateSnowflakesThread() } - private fun updateSnowflakes() { - updateSnowflakesThread.handler.post { snowflakes.forEach { it.update() } } - ViewCompat.postInvalidateOnAnimation(this) - } - private fun dpToPx(dp: Int): Int { return (dp * resources.displayMetrics.density).toInt() } @@ -87,7 +85,7 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) alphaMin = snowflakeAlphaMin, alphaMax = snowflakeAlphaMax, angleMax = snowflakeAngleMax, sizeMinInPx = snowflakeSizeMinInPx, sizeMaxInPx = snowflakeSizeMaxInPx, speedMin = snowflakeSpeedMin, speedMax = snowflakeSpeedMax, - fadingEnabled = snowflakeFadingEnabled) + fadingEnabled = snowflakesFadingEnabled, alreadyFalling = snowflakesAlreadyFalling) snowflakes.addAll(Array(snowflakesNum, { Snowflake(snowflakeParams) })) } @@ -97,6 +95,13 @@ class SnowfallView(context: Context, attrs: AttributeSet) : View(context, attrs) updateSnowflakes() } + private fun updateSnowflakes() { + updateSnowflakesThread.handler.post { + snowflakes.forEach { it.update() } + ViewCompat.postInvalidateOnAnimation(this) + } + } + private inner class UpdateSnowflakesThread() : HandlerThread("SnowflakesComputations") { val handler by lazy { Handler(looper) } diff --git a/snowfall/src/main/java/com/jetradarmobile/snowfall/Snowflake.kt b/snowfall/src/main/java/com/jetradarmobile/snowfall/Snowflake.kt index 9f8177f..33e44d2 100644 --- a/snowfall/src/main/java/com/jetradarmobile/snowfall/Snowflake.kt +++ b/snowfall/src/main/java/com/jetradarmobile/snowfall/Snowflake.kt @@ -44,6 +44,9 @@ internal class Snowflake(val params: Params) { init { init() + if (!params.alreadyFalling) { + positionY = positionY - params.parentHeight - size + } } private fun init() { @@ -96,5 +99,6 @@ internal class Snowflake(val params: Params) { val sizeMaxInPx: Int, val speedMin: Int, val speedMax: Int, - val fadingEnabled: Boolean) + val fadingEnabled: Boolean, + val alreadyFalling: Boolean) } \ No newline at end of file diff --git a/snowfall/src/main/res/values/attrs.xml b/snowfall/src/main/res/values/attrs.xml index d8ef1f5..63d3d7e 100644 --- a/snowfall/src/main/res/values/attrs.xml +++ b/snowfall/src/main/res/values/attrs.xml @@ -27,7 +27,8 @@ - + + \ No newline at end of file