From 1725b93067576c1c9328546c6eff865f357d89f3 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Sat, 27 Dec 2025 10:38:33 +0100 Subject: [PATCH 1/2] Show gradienten issue as a sample https://github.com/AppDevNext/AndroidChart/issues/489 --- app/src/main/AndroidManifest.xml | 1 + .../appdev/chartexample/GradientActivity.kt | 78 +++++++++++++++++++ .../chartexample/notimportant/MainActivity.kt | 4 + .../gradient_drawable_precipitation.xml | 8 ++ app/src/main/res/layout/activity_gradient.xml | 22 ++++++ 5 files changed, 113 insertions(+) create mode 100644 app/src/main/kotlin/info/appdev/chartexample/GradientActivity.kt create mode 100644 app/src/main/res/drawable/gradient_drawable_precipitation.xml create mode 100644 app/src/main/res/layout/activity_gradient.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05de50e6b7..21f507e728 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,7 @@ + diff --git a/app/src/main/kotlin/info/appdev/chartexample/GradientActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/GradientActivity.kt new file mode 100644 index 0000000000..a79d45a515 --- /dev/null +++ b/app/src/main/kotlin/info/appdev/chartexample/GradientActivity.kt @@ -0,0 +1,78 @@ +package info.appdev.chartexample + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import info.appdev.chartexample.notimportant.DemoBase +import info.appdev.charting.charts.LineChart +import info.appdev.charting.data.Entry +import info.appdev.charting.data.LineData +import info.appdev.charting.data.LineDataSet +import info.appdev.charting.formatter.IFillFormatter +import info.appdev.charting.interfaces.dataprovider.LineDataProvider +import info.appdev.charting.interfaces.datasets.ILineDataSet +import info.appdev.charting.utils.Utils + +class GradientActivity : DemoBase() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_gradient) + + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + Utils.init(this) + + val chart: LineChart = findViewById(R.id.chart) + + // Minimal chart setup + chart.description?.isEnabled = false + chart.legend?.isEnabled = false + chart.axisRight.isEnabled = false + chart.setDrawGridBackground(false) + + // ----------------------------- + // Linear function + // y = k * x + // ----------------------------- + val entries = kotlin.collections.ArrayList(200) + val k = 2.5f + + for (i in 0 until 200) { + entries.add(Entry(i.toFloat(), i * k)) + } + + val dataSet = LineDataSet(entries, "Linear").apply { + isDrawValues = false + isDrawCirclesEnabled = false + lineWidth = 2f + + isDrawFilledEnabled = true + fillAlpha = 255 + fillDrawable = ContextCompat.getDrawable( + this@GradientActivity, + R.drawable.gradient_drawable_precipitation + ) + + fillFormatter = object : IFillFormatter { + override fun getFillLinePosition( + dataSet: ILineDataSet?, + dataProvider: LineDataProvider + ): Float = chart.axisLeft.axisMinimum + } + } + + chart.axisLeft.axisMinimum = 0f + chart.setData(LineData(dataSet)) + chart.invalidate() + } + + override fun saveToGallery() = Unit +} diff --git a/app/src/main/kotlin/info/appdev/chartexample/notimportant/MainActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/notimportant/MainActivity.kt index 86a0874ef8..fe41d40309 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/notimportant/MainActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/notimportant/MainActivity.kt @@ -54,6 +54,7 @@ import info.appdev.chartexample.CombinedChartActivity import info.appdev.chartexample.CubicLineChartActivity import info.appdev.chartexample.DynamicalAddingActivity import info.appdev.chartexample.FilledLineActivity +import info.appdev.chartexample.GradientActivity import info.appdev.chartexample.HalfPieChartActivity import info.appdev.chartexample.HorizontalBarChartActivity import info.appdev.chartexample.InvertedLineChartActivity @@ -208,6 +209,9 @@ class MainActivity : ComponentActivity() { add(ContentItem("Compose Horizontal")) add(ComposeItem("Horizontal", "Render bar chart horizontally.", HorizontalBarComposeActivity::class.java).toDemoBase()) + + add(ContentItem("Demonstrate and fix issues")) + add(ContentItem("Gradient", "Show a gradient edge case", GradientActivity::class.java)) } } } diff --git a/app/src/main/res/drawable/gradient_drawable_precipitation.xml b/app/src/main/res/drawable/gradient_drawable_precipitation.xml new file mode 100644 index 0000000000..b44afe7e79 --- /dev/null +++ b/app/src/main/res/drawable/gradient_drawable_precipitation.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_gradient.xml b/app/src/main/res/layout/activity_gradient.xml new file mode 100644 index 0000000000..9d0c4225da --- /dev/null +++ b/app/src/main/res/layout/activity_gradient.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file From 5c291d7c3baaa1a3c93ee9e8d4b07e4758f39850 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Sat, 27 Dec 2025 11:09:25 +0100 Subject: [PATCH 2/2] Adapt new screenshots --- ...2-GradientActivity-Gradient-1SampleClick.png | Bin 0 -> 14170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshotsToCompare9/StartTest_smokeTestStart-42-GradientActivity-Gradient-1SampleClick.png diff --git a/screenshotsToCompare9/StartTest_smokeTestStart-42-GradientActivity-Gradient-1SampleClick.png b/screenshotsToCompare9/StartTest_smokeTestStart-42-GradientActivity-Gradient-1SampleClick.png new file mode 100644 index 0000000000000000000000000000000000000000..e355e77b77f5e27bcca50c1526fed5a573bb5e5b GIT binary patch literal 14170 zcmch8bySpJ+wL=TcPiZ-3W78^NGlD}At8-QNevCsNGPZ@QWAnlGnA+Z0s@2NP>M7t zU1yK}&ij4uIp12R);j*#9zW&57FN`J) z>MlHJsIMQoA1Er>ZfG=mCGv89(v>Wwug|6k^_^rm?n!(;b8@_U?`A=0eS|aR*(>$2 zQX`qDTc4(*+nvRCG_ZOiTek({7P&%}o}XD9BnK}@$0fJ9Zw2p928Jr?m*3@`=wLYs zIx`P^-Igh)V-Ob07j<_Omx59?3Z@P(>xH-qM(rRfJr{8(j_)l40-kP0qQs#ojK@Y< zOoyEks~`WroM!BXrOO|cpU<97w^TS7N2c_>O~?U9v+^m zW)>rzUb~%gMeC}qh2D4*%WB79)VPGWcvxy`YMHgnXi<6>8f{ZlZSeF;i|@uHwGZWk zTKCJ=CzGh{^OLQ`;w&o_cXwfrrsd3Xl=!u4(e6_X^XuR04m-(15Yf?imDU{!yT^F= z_&a;mq0H4C=Q0XsKW`Vdw=0ZflXN3ZI*yHk4(DSIvqF#P-6rb^1&u39AL*3bTi{hZ zB77OVf9JV;Al<=ipeVGpcIXtk?8<=>7r$>`M4q3Ye{eNxaAUmnQZBB} z>C3|Fce7nHesh*@v&*^ZV9rz5-h2}ra1qIBS+z2eOiWH*tgt>4!00jPsNXuNwf+1& zgz5TyoZO4kA3I2FavLC@RMhXd+d){0r}O0A>l5NZ7bkOl#adY$)%SRc^$EYoA26No zdtT5f{oZp2S|OL)hBlkmMC8s77i)wBN3tiUrgmzRgGuHN-%HiFqD16&dZ?j-&==t} z@$6nVZeYKE|GwnhLWr*V7|YP$!Go(-kA89|BqX4B`dIs1tJ~=A1*;Iq9j_D`9N1iW zMj~R>%5YCdYUUyJ`D*n!k>dGIvNy`oZ@yv513M3e8g6h8`js=+^W?Td+*?1%lm@T{EnGe4zo*BsPPuP1|(#!g7!gX|Xma4zawgv7)u%1G>C(}Q+i$#M8 z5en9Q!6*CkAS`s18NAy5Bv=hWK>gp;*UW*{7{4})!gvd?Z2$GzzM=8)=!S-d4=%^+ zPKxnufd>ns7rUa~-#;^+?pa?*zWG*(*=npbbAks0-u)(~NQ%^PJs~=b<~l%DDxgEB)Ek*tVx6LJQh3z=ie3W$q?NMC3Z zMnxGF_U{3-*N*YC!_3T#UX~IZHr4dN>29v9G0gu?y6D8)=9ZSX<@h!_A+3=9~ATK|-x)H78f zM$WYOEuJ3zDy^=@hvY6!e|a(C%lfV(SH~)bLBtX^Z^)~tAZ~E~;{PI+PdgtMjYhL! zf?*kigLwIpW$9M{CUQP`@?>Rw9d2S`(z^zS+Y$*wxBrPQz|)iE_Zh}3??i-!!9dnv zfrcg~2v9z@cZ_@2Bqb$nGt}TXw%H{_i`X68UBrhV)Fpj=b$fB^d~>VDb57xOs^jc3 z$SC8l&0!FT_iQ2ib-DAe6wiJppw?DbtB#)n72Bq3!YL>Js<@uaYpTH=Ldb45Vk;gG zCyPl-W4t6GF;V9%2Y8IzHS?WE+2PgHUgR5+@1LJtJsf}6 zj*HBh+1T1rb9EI2FaFPdoigAkXvNDxWWdK?=l1PNrP*7e+X_cqAm?sR*eB<|eogA` z?vBYm?ZL7)Z{DnN`oaPsOLTG^TW`TXN^TOJHgoMn;qkt?q~cn4z94#zRdP>7Gr&md z9SCs@(P0)M`0PE;QE`0FX0LG_e~!dsgO=_$F;=6-#|PJBD7pJ1iJ8O-LMalZCSyxi zlT4`+^p=R^VsiaR6i`kWQuFLd%8A<~e?$olM@!#X$$O-EyT7YQ zJ2lu`1xmEq!KgD!3=9jq?mTTh!io}al}b}{nZg* z=Dpo~Zm(flXJdhDon3cqILzuFBq2{S=>sdKV{gmm;sbOiJh{~$!#t+UPVXcB3kl?* z%IJrilubo}B+?<1-4ztM;lnX9%KGW#>@9y3PmlfX;uXwOPxD*52QO#5`(ZsT2E{pd z5=BSeQCM+~dyLwqw}GgJIi9}}RotiR*v1COt5*V>f|=)ulyqAoz_y4V=E)tUCf_^2 z_hKZW6b3tjzkpULl6A-hZ1L6Mzl_CNQesDrA5pUfoZGqy2FNRse}nh6cHG^R_;uZ-XbuirZyec zrT4j>Zv(_|RmM(3LNF@s32&hYw**+Id5}=c<^vrcVHojNJ2jXERvPv>xA8Y;e%KS# z(SdpSihvVS^+`p{hLDCdhc~6N-65@r0h%LINimGR+>6zi{l7rt2z|GF+dP74N3InUU(0(SdU^D8sssc5PX8wV8+{gQ0v&J{cffW|( zcL;lpQ#zY?l=EVZoL;=(%NUf#+IniWRYz3S!I%^|7!E|H|2>6&m?Y|w#kXA--;Zr- zAHX`PTA$1hDB(aO%%b*}@yDs{ zdOYM6-%u3LF!w~>BD2r4%m*Pq;&0d#M9ORsFuiN-TpJLOcRCxy2QSDEG5DNENi?7v zRA_=^7t_PCe2A-1kITbeb9Y$FI!!jn5v($_>=U}7TQ<8J0(`C@l3&2H|HP56{*`}A zprXGkg3lIsco~9+Ev0X^k(G_ISLNg0%Ts71cp}vr%*P4nOOyUVAfb{Ub#VT@2b?2C zC1BT{wnfp}pFD++{aiQAITNuaAY^;+gIE@<|`Wvb%XUrsDlI zA^=2jK3KGS91q`U-APW?kSsDTjxb%bxJ*&7SWH49a%X3!;@q-$4KC3_?jB~)phSqZ z7D>!bu_DSgku3GKFIlq`CVl;S96oChMRnW$B?#HzF1I&oa5#I=9`h z37ld!#CKsrq#Lu=_hZKLeGpM9um<MsYd#L+Kc z#v0#30&bzj6g2|NE{O|0?F;Ss^+hq+#45mHwb^~@gJX5jCy-kEyalYP%gUbZEc*HR z#pvya|1>5?W}iNOpi}UgdG{)Lca=N*OLb_J6fciT#l7PbY3JO-Icu^F`!C$-5I{Zj zwLwSs*XKG|@yS`>02^#J{a^to-p0+%ZFP<|UiEI>x5p^KZvcoeIEbqI`MopVgDO8( zH==&$_L2}q_h|A3HP>CO&$bF!ro~`=!i`0>>pf%+1VNx|TbPewy%`)V4*;=?i%ZJK zyEPs&GQaotv7no3YQrNV;TYrsM6@0r=y2GQwsuY@l%C%7Yf$!8Na*RIH-KW57EM%w zCRK2S+`j#dDe)^;!sP?^A?TX>q{N~RNA|ZCM?4*U5_&VeA_k-{lk* zXXiLU$KVY&>Jt44oKt+air>3)@0y(Dz{h0OMMFWogx?HQ!n)2*2lNCWlxQ;vd-~;K z*R*CoVI>?i14+VeA(^}Cg!mG$Sca8%xFC4w=$cY?R*7o7Aaul6r@_YmbUV0SS#`Ta zXOrP6OueY7FcYp3AU{Dw7K#nx(a1E2*h6%tWb{|JlHtUdkqHg01?IY-anJCW0=;=I zg4Fl7Ca?tSh`2A8+Cz9rV2!c@EV4^fA_&>WpUQmFI6Nbxp%$N1V5US-Jieir%uvK` z4vT0|B1Jfsen8Euo*i|AoTq*R*Pu&RNmxprfEFA4#R|Zeu9@6^=I9?_q%OPljOs?i zyJe%8p`}@C6@wIJwp7OwGT9OCQ>p~;R?3}JbFmTx9iPxwo5LJT-b(zCcz{k5tVy4- zHri%kOXYc_N#*Q(lN99U-%T5IXIGxr0AMoGgWzN{%PQbb6RsYKtG=3wcS{zlPk3v? zzYcBhIR--72-2K8&X`a8cUzxub$KjIou*dY1YOGQO^KDIAjjx)y$noxJdv~9owTbf z_9YQ+q0xavtj8Z|YG<0hsi#4$2&F1Ys zNk5r!8XS-zDES#?OYn7cofo5DrGgxwTJ)~0K z7?mm-!7gq?T-ogS-J~zj9V|ivUX^iH!Y95!FsfpU>lDJ-3u0!*3m@*){2^(3*WyJl z)4uHRPKc|#AjBM9#GQicCAePNuOSZ}q&;g-SC*&Q&1h)Vzcl;cYi$Vv9Hsnj4<$nl zE*HYrBcK=;Bu1l;AleGf7w|8bedq=Yg?pRi&CxlBE!^|G1VXw|C+x;TfuJsao=YpU;<=U5T(je1&%iIt~ehT{6i}e8M_8FRxTU!CZ%n=N<;K%vUNffeZJ>LhGWt z|D%m6(IR|c`6~A((w%9iH|{tAjHBZ9IZb+vfF=W(_>1A3h_qWD2mmOJsFPK5dQ*W6 zycc%49v3LyN7u9$8ojgyqrzR^ZSHVTVXs46SpA1~U?4kbXXYMR4s6~I1bG8u7GU)q z6|q<<5Q)a54WbVQ)0EK))%nKUlU6AYhnP66h4x8!@^ z4U|BH{K9*+l%7ZuGMhN-#lyTAU2ib^D|wz?5Nw^U43)yiU;QiRi@j&YO5^uiVCMid zI;TD&jickMI*Dh;V;kmZb<(u(!nJ_Ft(yd@? z+4WF5Q$K#y)=Pt(;v5FdkvLBtNv6^F5f8|j2#mqVo>7stN>T7CE&w=G51nQDO$^_k z-_@b92dP`)Ht^cq<=$Df$d0;@A2<5gUnNQ60$xDkwwh4fwR~OTJduREL*nkB=7-j2 zUYbM z;lSvR48>Z{&R08&MKyqkb~|ysK4q4|x5%V`9bLjgSD zNS6=5kjxqD0^rrz-FjM&*3Kfk-VE_7K74Kg3Q!x&FnHE`lG3#E*<25>(}9HpZqNRT zgoPzFDgfsky(d$}Xj2T<&(naH8+P7PLq~G6K@Uwa0|4dHo|ZpVzQsSpN$x>D>QCA_owd~4t zOMRY&XuQXacwVOB#vO%9ALxzEiy8qu>zqx9n%ZT7#=T~&7r>rMe%7_VQZS2Bxtx2d zE(bjHSyzS*`FQP#7RC=V_R_h`xY!I2&8<>dfZiRp%%}>JknSVTvVT8SIMRC&M^QW< z84si$al?iK>JSc?M-fD2te@*gFtbr23^L($y3QKgvwjbO^B2z&YN6{nQ?P5q7vYv< zMwHko`dh-B5hRGWBW>q5t@k{!R-0DM`m(VoCgqh-KErc!$rvzG^#|81oyh1t1s(~T z0<}iQ(nwZ4VKFw-<;&d|CRui?l{$u;_5EV9ViI752^!q(0flMW_DB-&w>5y?edyz3 z)Ow4iA^hha z|2`GqoL5#?0b1eH21vucN-18qQMvg+w54R1Zr_h2A3#Cn3SRo1?d7d$X)V7|or^c!}mwG?w@* zn$T?M#TkY_-F|=B)5gn-V(xtZ9Sq93=C1N@FzEB67knfqA`U|Ww9$CcLk*61Mwcyg z`i2{U>2ak)ZXO=*{W?x8Y2sB!$HtUn1r=5OHYRbq#Zvm0gDiQ8CJ~(CKe4_)`-<>@ zsT=(R@bP)+=7lZg!X9Ya{zW9VbWCS)nAIa_25HvA- z$>WidLo2>|nXcGX2$2-v8>-QEpvvNlNcZP;gQ*25Zg}23Q2PoV-&;#@ypxpW$)9_KqkXPT+!WtnFi-SI<43B!64kSJ+Z5}M@cS{?8H zWCTEEM`s|r9E8=lJ=Uz&XLA`U`QG`i7ip)PytCLvci+&6StzW&NhHoK!@^_Z)~{x_ z6%al3Kri7NA)z9;%ss7og5?)`=BY_9*j>wcz#~1^-84xiX7712-%pa-3fkQ9z9j9< zfJm42%yJ6xOmP`jv%EF;GVLf!jtR@403;$3T%qL>{3UE~fZ{()mf-hG$H!bL>k*w_ z0dR}kan!Ku!gYZSo~DU{%_rEZErbi!NaSrMrzL}*0S_f@OL!MHeXZNx6Ml7GNQ}E{ zOKa9vO)GLiO7aNAGrO(loL*gN($zSb-iKPhkgSihU?`dM&Kk-Ir6g0T{`w zL;T~9i4KuzrUEoFX~!bPLqN#m7gO^Ak_zsM7~=z5;R@1EQ$S?=#7J%dl(tLsY-Fvj|s`fja>L%IpEe#CJQy z?E_BB&#>*C1e3RO2O%!y*ZyYl`u#OKyrYEhd901+r+El(s>pg@z&Zf?CG_yu?6il{ z8XjrRD*td-nU5xEQ6yrCK^DE{#GqHEV|{h-)?#v@xVj{zC%T8u$S15{y{RTxF*poN zD}GtlH#>2r=MQGRc!ELWg}RO6J)6lOUrzEfFhWRyvO_?JE*#L`bC{syYf@?>IH;H6 z0DI29?xs$19ZRq{-i&m!mDqcko|_yyrQUlaQ`*f+VJ+(kD~*Ck1iSn58l23`h-7ms zJxMW0gP0qaNrKA)$}RIQuitdre4tw1L8jYRcMF&i1Buc|S4Gwv=X9b0XcFuy1E74> zL73Mh9fKckrr2reV<7*gaCSX?q<+2^HNAoXtv7*oY9K1znVx8^oGCxta=79Z{YxCDgnz-Cy~bLZa@;T_`)ge zApNnuDNLPV?rEP1Qy-qEcv`+GZ@?i+yBeh;vYMmS`j57m*^I_iP0-8+3zdR3FSV@s z>`0W#%dKhKHa1b}Q6(R8PZE!ReZe?F4AM}N8#l`^1P;=GHZEMqMDO=5T&?8DsR# z#I9rluO>^1K6%E zst?f9!@c&>e)eWE>=cz>C;E6=4o5{&S>SnKFe*SzBokQl7GXv~s}T|)MCi6!&TfWS zzE>6O=vOy59WO#!df^^x#}(___KuFwGiM=d{&b;$xe!@Yv(H1$G@!66k`#%^S4wO` zrfdjjH(rOWou@UQM#zCVqm%}K#Tyc#&9tbSFH5rR`j

FwiS?{`L);O+jpuE8U+v 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 literal 0 HcmV?d00001