【问题标题】:Draw partial circle as progress bar in android studio在android studio中绘制部分圆圈作为进度条
【发布时间】:2021-01-27 03:05:42
【问题描述】:

总结:

参考图1。

我需要将灰色部分保持在绿色部分下方,这样当绿色减少时,灰色变得可见。但我也想要未覆盖的部分(只是灰色不存在)。导致 2/3 重叠的圆圈。


我正在尝试在 android studio 中创建 2/3 圆(带圆角)作为进度条。我做不到。 我希望得到你的帮助。

当前圈子:(图 1)

我需要的圈子:

形状:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="ring" android:innerRadiusRatio="2.5" android:useLevel="false"
            android:thicknessRatio="12">
            <solid android:color="#DDD"/>
     </shape>
    </item>
    <item>
        <shape android:shape="ring" android:innerRadiusRatio="2.5" android:useLevel="true"
            android:thicknessRatio="12">
            <solid android:color="@color/colorAccent"/>
        </shape>
    </item>
</layer-list>

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    tools:context=".MainActivity">

    <ProgressBar
        android:id="@+id/timerProgressBar"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintDimensionRatio="1:1"
        android:indeterminateOnly="false"
        android:progressDrawable="@drawable/circle"
        android:rotation="-90"
        app:layout_constraintBottom_toTopOf="@+id/guidelineBottom"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guidelineTop"
        android:progress="10"/>

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineBottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.1" />

 
</androidx.constraintlayout.widget.ConstraintLayout>

【问题讨论】:

    标签: android android-studio android-layout android-progressbar


    【解决方案1】:

    您需要将#DDD 颜色替换为透明,并可以将您的文字放在上面,它会为您提供您想要的相同设计

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="ring" android:innerRadiusRatio="2.5" android:useLevel="false"
                android:thicknessRatio="12">
                <solid android:color="@android:color/transparent"/>
            </shape>
        </item>
        <item>
            <shape android:shape="ring" android:innerRadiusRatio="2.5" android:useLevel="true"
                android:thicknessRatio="12">
                <solid android:color="@color/colorAccent"/>
            </shape>
        </item>
    </layer-list>
    

    【讨论】:

    • 这不起作用。我想要红色部分下的灰色。我想要 2/3 的圆圈(比如红色),我还想要下面是灰色的。
    【解决方案2】:

    我认为您可以通过使用 Lottie 来解决您的问题。有多个 LottieFiles 可用,或者您可以使用自己的 SVG 并在您的应用中使用 Lottie 加载它们。

    例如。如果你用这个 https://assets9.lottiefiles.com/datafiles/cOSizCzzp3gv6Qv/data.json, 您可以将视图尺寸设置为显示圆的 2/3,然后您 可以设置动画的持续时间。您还可以设置起始帧 和动画的结束帧。

    有多种自定义选项可用。你可以在这里找到更多的彩票文件:https://lottiefiles.com/ 以及这里的实现:https://github.com/airbnb/lottie-android

    希望这会有所帮助,祝你好运!

    【讨论】:

      【解决方案3】:

      如果不想自己画条,可以使用https://github.com/futuredapp/donut。它是高度可定制的,因此您可以轻松实现所请求的行为。

      【讨论】:

      • 我想创建自己的。你知道怎么做吗?
      【解决方案4】:

      您可以使用 Material Components 库提供的CircularProgressIndicator

      类似:

              <com.google.android.material.progressindicator.CircularProgressIndicator
                  android:id="@+id/progress"
                  app:growMode="bidirectional"
                  app:trackThickness="8dp"
                  app:indicatorColor="@color/green"
                  app:trackColor="@color/grey"
                  app:indicatorSize="100dp"
                  app:trackCornerRadius="8dp"
                  android:progress="75"
                  android:rotation="225"
                  .../>
      

      使用这些属性:

      • trackColor 您可以更改灰色/未覆盖部分的颜色。使用父背景颜色将其隐藏。
      • trackCornerRadius 更改指标的圆角。

      您必须根据进度值应用轮换。

      progress.rotation = 180+((1-value/100)/2*360)
      

      注意:至少需要1.3.0-alpha04版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        相关资源
        最近更新 更多