android 使用SweepGradient实现渐变圆弧,报错
使用
val sweepGradient = SweepGradient(0f, 0f, mInnerProgressColors, floatArrayOf(0.0f,aqi / mMaxAqi))
mInnerProgressShader = sweepGradient
报错: color and position arrays must be of equal length
2021-07-07 09:19:57.974 31230-31230/com.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxx, PID: 31230
java.lang.IllegalArgumentException: color and position arrays must be of equal length
at android.graphics.SweepGradient.<init>(SweepGradient.java:97)
at android.graphics.SweepGradient.<init>(SweepGradient.java:63)
at com.xxx.widget.AqiDashboardView.setAirQuality(AqiDashboardView.kt:168)
at com.xxx.AirQualityFragment.refreshAirCircleView(AirQualityFragment.kt:286)
at com.xxx.AirQualityFragment.refreshAllView(AirQualityFragment.kt:427)
at com.xxx.AirQualityFragment.onVisibleToUser$lambda-5(AirQualityFragment.kt:250)
at com.xxx.AirQualityFragment.lambda$0Lfa2xxRhVFNzo7mSNxMIlpcjJ0(Unknown Source:0)
at com.xxx.-$$Lambda$AirQualityFragment$0Lfa2xxRhVFNzo7mSNxMIlpcjJ0.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7860)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
看源码:
可以看到,是因为colors 和 positions长度不一致造成的异常。
后来一看,确实是自己设置错了
而positons的size是2,这就造成了上面的异常。所以,把这两个统一起来就好了。
当然,可以只传colors,positions传null,这样colors可以随意长度。