L预览的环形状不起作用

Rog*_*ueX 13 android android-5.0-lollipop

只是测试新的开发人员预览,并注意到我现有的环形抽屉没有正确渲染.而不是一个戒指,它是一个完整的圆圈.这是一个错误或有什么改变或我开始时做错了吗?任何可能的解决方

这是代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@android:id/progress">
        <shape
            android:innerRadiusRatio="3"
            android:shape="ring"
            android:thicknessRatio="7.0">
            <solid android:color="#ff5698fb"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新

我更新了形状如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape
            android:innerRadiusRatio="3"
            android:shape="ring"
            android:thicknessRatio="7.0">
            <solid android:color="#ff5698fb"/>
        </shape>
    </item>
    <item >
        <shape
            android:innerRadiusRatio="4"
            android:shape="ring"
            android:thicknessRatio="5.5">
            <solid android:color="#ffffff"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

通过覆盖两个圆圈产生一个环.但是我使用它的进度条不起作用.以下是进度条的代码:

<ProgressBar
                android:id="@+id/progressCircle"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:indeterminate="false"
                android:max="100"
                android:progress="65"
                android:rotation="270"
                android:progressDrawable="@drawable/progress_circle"
                android:visibility="visible"/>
Run Code Online (Sandbox Code Playgroud)

小智 21

您需要添加android:useLevel="true"进度项.这在以前的版本中似乎没有必要,但L想要它.

<item android:id="@android:id/progress">
    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="7.0"
        android:useLevel="true" >
        <solid android:color="#ff5698fb"/>
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)


Chr*_*cía 21

TL; DR:显式设置useLevel自定义进度条中使用的所有环形的值.


卡诺的答案是解决问题的方法.我正在补充它,以在自定义进度条中添加有关环形状的一般信息.

似乎默认值useLevel已经改变了Android版本.这是与之相关的调查.

以下是使用响铃作为进度指示器的进度条的工作实现,以及另一个响铃作为进度背景:

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

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Progress background -->
    <item android:id="@android:id/background">
        <shape
            android:shape="ring"
            android:useLevel="false">
            <solid
                android:color="#dae1e6"/>
        </shape>
    </item>

    <!-- Progress -->
    <item android:id="@android:id/progress">
        <!-- Rotation of the progress to start at the top-->
        <rotate
            android:fromDegrees="-90"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="-90">
            <shape
                android:shape="ring"
                android:useLevel="true">
                <solid
                    android:color="#61bcf9"/>
            </shape>
        </rotate>
    </item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

将其用作以下progressDrawable内容ProgressBar:

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:progressDrawable="@drawable/custom_horizontal"
    android:progress="50"
    android:max="100"
    android:id="@+id/progressBar"
    android:layout_gravity="center"/>
Run Code Online (Sandbox Code Playgroud)

设置useLevel=true为进度环形状和useLevel=false背景环形状,为所有Android版本提供正确的所需行为:

在两个版本中都正确

useLevel从背景形状中删除:

Pre 5.0(左)| 5.0(右)

KitKat不正确 在棒棒糖中纠正

useLevel从进度形状中删除:

Pre 5.0(左)| 5.0(右)

在KitKat中纠正 棒棒糖不正确


因此,据我所知,useLevel用于指示形状是否受进度值的影响.如果不是(假),它将被完全涂上; 如果是(真),它将被绘制为与进度值一样多.

总而言之,似乎:

  • useLevel默认为trueAndroid的<5.0,导致背景环跟随进展值,如果useLevel在其环形状没有被设置,从而使得隐藏进度指示器环后面.
  • useLevel默认为false的Android> = 5.0,导致如果被充分涂进度指示器环useLevel在其环形状没有被设置.

因此,由于这种不一致性,最好在依赖于进度的形状中明确设置to的值,useLeveltrue在不依赖于进度的形状中设置值的值false.

这种行为是基于我的观察,我没有找到任何确认它的来源.官方Android文档对此并不十分清楚......