半径在 SeekBar 的拇指上必须 > 0

Lae*_*tan 5 android gradient

我正在使用带有 Seekbar 的自定义拇指。拇指是一个白色圆圈,背后有一个使用渐变创建的阴影。它在大多数情况下按预期工作,但对于某些设备,我收到错误java.lang.IllegalArgumentException: radius must be > 0当布局加载时:

java.lang.IllegalArgumentException: radius must be > 0
                at android.graphics.RadialGradient.<init>(RadialGradient.java:53)
                at android.graphics.drawable.GradientDrawable.ensureValidRect(GradientDrawable.java:757)
                at android.graphics.drawable.GradientDrawable.draw(GradientDrawable.java:426)
                at android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:349)
                at android.widget.AbsSeekBar.onDraw(AbsSeekBar.java:337)
                at android.view.View.draw(View.java:14757)
                at android.view.View.getDisplayList(View.java:13617)
                at android.view.View.getDisplayList(View.java:13664)
                at android.view.View.draw(View.java:14459)
                at android.view.ViewGroup.drawChild(ViewGroup.java:3273)
                at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3091)
                at android.view.View.draw(View.java:14768)
                at android.view.View.getDisplayList(View.java:13617)
                at android.view.View.getDisplayList(View.java:13664)
                at android.view.View.draw(View.java:14459)
                at android.view.ViewGroup.drawChild(ViewGroup.java:3273)
                at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3091)
                at android.view.View.getDisplayList(View.java:13609)
                at android.view.View.getDisplayList(View.java:13664)
                at android.view.View.draw(View.java:14459)
                [...]
Run Code Online (Sandbox Code Playgroud)

这似乎只发生在一些罕见的设备上,并且由于 flurry 无法报告它们是什么(身份不明),我认为它们是根深蒂固的。

在用于创建拇指的 xml 下方:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/lockscreen_thumb_shadow"/>
 <item android:drawable="@drawable/lockscreen_thumb_round"
    android:bottom="10dp"
    android:top="10dp"
    android:left="10dp"
    android:right="10dp"/>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

lockcreen_thumb_shadow :

            <?xml version="1.0" encoding="utf-8"?>
            <shape
                android:shape="oval"
                xmlns:android="http://schemas.android.com/apk/res/android">

                <gradient android:type="radial" android:gradientRadius="35dp"
                    android:endColor="#14009FE8"
                    android:centerColor="#96009FE8"

                    android:startColor="#009FE8"
                    android:innerRadius="20dp"
                    />

                <size android:width="70dp" android:height="70dp"/>
            </shape>
Run Code Online (Sandbox Code Playgroud)

lockscreen_thumb_round :

            <?xml version="1.0" encoding="utf-8"?>

            <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="oval">
                <size android:height="40dp"
                    android:width="40dp" />
                <solid android:color="@android:color/white" />
            </shape>
Run Code Online (Sandbox Code Playgroud)

Ara*_*ash 4

当我使用渐变并发现棒棒糖 5.0 时,我遇到了这个问题, gradientRadius值中的 % 有问题。

我有这一行:

android:gradientRadius="120%"
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

android:gradientRadius="120%p"
Run Code Online (Sandbox Code Playgroud)

问题就解决了。