android - 如何在Android中自定义进度条?

标签 android drawing

我想在 Android 中自定义一个进度条,使其看起来像这样:

enter image description here

请注意,此条形图所在 View 的绿色背景是渐变色。
我试图用定义为的可绘制对象制作红色条:

<?xml version="1.0" encoding="utf-8"?>
<shape
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
<corners
    android:radius="8dp" />
<solid
    android:color="#FF0000" />
</shape>

我没有特意在 XML 文件中定义栏的宽度,以便能够以编程方式设置它。
条形高度为 16dp。
这适用于大于 16dp 的宽度,但对于小于 16dp 的尺寸,红色条看起来像:

enter image description here

我明白为什么(半径不适合小宽度),但我找不到解决方案。
我想制作一个从白条外部开始的可绘制对象,并且白条会夹住外部部分,如下所示:

enter image description here

但是我没有找到如何做到这一点。
有人有想法吗?
提前致谢。

最佳答案

您的问题示例:

src/com.app/BarSampleActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;

public class BarSampleActivity extends AppCompatActivity {

    int timePassed = 0;
    ProgressBar bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bar_sample);

        bar = (ProgressBar) findViewById(R.id.progressBar);

        Thread background = new Thread(new Runnable() {
            public void run() {
                while (timePassed < 100) {
                    try {
                        bar.setProgress(timePassed++);
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        background.start();
    }
}

res/layout/activity_bar_sample.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:background="@drawable/gradiant_bg"
        android:orientation="vertical">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="8dp"
            android:progress="20"
            android:max="100"
            android:progressDrawable="@drawable/progressbar_bg" />

    </LinearLayout>

</LinearLayout>

res/drawable/gradiant_bg.xml

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

    <gradient
        android:angle="90"
        android:centerColor="#21954a"
        android:endColor="#33bf65"
        android:startColor="#0e6b30"
        android:type="linear" />

    <corners android:radius="4dp" />

</shape>

res/drawable/progressbar_bg.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="8dp" />
            <solid android:color="@android:color/white" />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="8dp" />
                <solid android:color="@android:color/white" />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="8dp" />
                <solid android:color="@android:color/holo_red_dark" />

            </shape>
        </clip>
    </item>

</layer-list>

我是这样的

Output of the following code

试试这段代码。我希望这就是您想要的 (@Aaron Tuil)。

如果您觉得需要更多时间。请从我的存储库下载并试用示例源 => Divakar-Murugesh/Custom-ProgressBar

快乐编码:)

关于android - 如何在Android中自定义进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926123/

相关文章:

r - 如何在R中的对数图中绘制一个圆圈?

javascript - 在谷歌地图中围绕一个点绘制半径

java - 如何从Java中的多个方法中进行绘制?

Android - 构建特定于 flavor 的代码和 View

java - 无法将 java.lang.String 类型的对象转换为 com.example.acubeitsolution.Client_Review_getter_setter 类型

java - 在 Kotlin/Android 中的 WebView 中搜索字符串

android - 对 Android 文档 : Fragments 的澄清

android - 在哪里可以找到 Android "Fingerpaint"演示? (Android Studio 时代)

java - Android 与 iPhone 显色性对比

graphics - 在 Mathematica 中绘制钟面(寻找更好的解决方案)