원형 진행률 표시 줄에서 색상을 변경하는 방법은 무엇입니까?


147

Android에서 원형 진행률 표시 줄을 사용하고 있습니다. 이것의 색을 바꾸고 싶습니다. 나는 사용하고있다

"?android:attr/progressBarStyleLargeInverse" 

스타일. 진행률 표시 줄의 색상을 변경하는 방법.

스타일을 사용자 정의하는 방법은 무엇입니까? 또한 스타일의 정의는 무엇입니까?

답변:


163

res / drawable 폴더에 다음을 입력하십시오.

progress.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:fromDegrees="0"
      android:toDegrees="360">

    <shape 
        android:shape="ring" 
        android:innerRadiusRatio="3"
        android:thicknessRatio="8" 
        android:useLevel="false">

    <size 
        android:width="76dip" 
        android:height="76dip" />

    <gradient 
        android:type="sweep" 
        android:useLevel="false"
        android:startColor="#447a29" 
        android:endColor="#00ffffff"
        android:angle="0"/>

    </shape>

</rotate> 

설정 startColorendColor선택에 따라.

이제 설정이 progress.xml에서 ProgressBar의 backgound입니다.

이렇게

<ProgressBar
  android:id="@+id/ProgressBar01" 
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:indeterminateDrawable="@drawable/progress"
 />

1
사용자 정의 대화 상자를 목록보기 헤더로 사용하면 작동하지 않습니다. 다른 접근법이 필요합니까?
Pankaj Kumar

22
녹색 고리 모양이 만들어 지지만 실제 ProgressBar의 스피너는 여전히 보입니다.
mdupls

회전 색상을 한 방향으로 만 이동시키는 방법이 있습니까?
thepoosh

48
"android : background"로 배경을 설정하는 대신 다른 답변으로 강조 표시된대로 "android : indeterminateDrawable ="@ drawable / progress "를 사용하십시오
baekacaek

1
정적 원을 형성하지 않도록 android : startColor = "# 447a29"android : endColor = "# 227a29"값을 다르게 사용하십시오.
Abhishek Sengupta

137

API 21 이상 indeterminateTint 속성을 설정하기 만하면됩니다. 처럼:

android:indeterminateTint="@android:color/holo_orange_dark"

API 21 이전 장치를 지원하려면 다음을 수행하십시오.

mProgressSpin.getIndeterminateDrawable()
                .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN );

2
함께 style="?android:attr/progressBarStyle"하지 작동합니까
USER25

색상 배열이 있고 각 진행률 표시 줄에서 색상 배열로 색상을 설정하려면
Prince

이것은 progressBar 링 색상을 변경하기 위해 나를 위해 잘 작동했습니다 :)
Gastón Saillén

API 측면을 강조해 주셔서 감사합니다
JamisonMan111 4

이 색상을 넣으면 회전하는 컷팅 된 링의 색상이되지만 전체 링으로 바뀌어 움직이지 않습니다.
Lucas Zanella

135

1. 먼저 리소스 아래의 drawable 폴더에 xml 파일을 만듭니다.

이름이 "progress.xml"

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" >

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false" >

    <size
        android:height="76dip"
        android:width="76dip" />

    <gradient
        android:angle="0"
        android:endColor="color/pink"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

    </shape>

</rotate>

2. 다음 폴링 스 니펫을 사용하여 진행률 표시 줄 만들기

<ProgressBar
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/relativeLayout1"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/progress" />

안녕하세요 Muhamed, 사용자 정의 진행 휠을 사용하고 있습니다. 런타임에 진행 휠의 색상을 변경하려고했습니다. 버튼을 클릭하면 진행이 시작됩니다. 색상을 녹색으로 설정했습니다. 진행률이 100 %에 도달하면 다시 시작하고 싶습니다. 이번에는 색상이 빨간색이어야합니다. 그러나, 나는 그것을 할 수 없었다. 가능하면 pls 도와주세요
harikrishnan

1
감사. 100 % 작동합니다. progress.xml을 android : indeterminateDrawable로 설정
Leo Nguyen

내가 이것을 시도했을 때, 그것은 두꺼운 원의 경계를 만들었습니다. 테두리를 줄이는 방법에 대한 아이디어가 있습니까?
Tejas

안녕하세요 Tejas, progress.xml 내부에서 android : thicknessRatio = "8"줄을 변경하십시오. 다른 값을 시도 할 수 있습니다. 그것이 효과가 있기를 바랍니다.
Muhamed Riyas M

그것은 작동하지만 서로에 대해 회전하는 두 개의 링 대신 단일 링을 얻습니다. 이것에 대한 어떤 수정?
AX

66

이 코드를 사용하여 프로그래밍 방식으로 색상을 변경할 수 있습니다.

ProgressBar v = (ProgressBar) findViewById(R.id.progress);
v.getIndeterminateDrawable().setColorFilter(0xFFcc0000,
                        android.graphics.PorterDuff.Mode.MULTIPLY);

ProgressDialog의 진행률 표시 줄 색상을 변경하려면 다음을 사용할 수 있습니다.

mDilog.setOnShowListener(new OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            ProgressBar v = (ProgressBar)mDilog.findViewById(android.R.id.progress);
            v.getIndeterminateDrawable().setColorFilter(0xFFcc0000,
                    android.graphics.PorterDuff.Mode.MULTIPLY);

        }
    });

ProgressDialog의 Progress Bar와 Progress.xml을 어떻게 연결합니까?
Meghal Agrawal

색상 배열이 있고 각 진행률 표시 줄에서 색상 배열로 색상을 설정하려면
Prince

36

Dato의 답변에 추가하기 위해 SRC_ATOP이 알파 채널을 더 잘 지원하므로 곱하기에 선호되는 필터라고 생각합니다.

ProgressBar v = (ProgressBar) findViewById(R.id.progress);
v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.SRC_ATOP);

1
2.3.x에서는 MULTIPLY가 투명성을 유지하는 채워진 원을 제공합니다.
azdev

색상 배열이 있고 각 진행률 표시 줄에서 색상 배열로 색상을 설정하려면
Prince

28

android : indeterminateTint = "@ color / progressbar"


단지 진행률 표시 줄의 속성 이상 사용 indeterminateTint은 당신의 색깔을 =
부 핀더 싱

최상의 답변과 모든 버전에서도 지원됩니다
Pankaj Kumar

이 미친 대답이 아니라 당신이 필요한 전부입니다. 다른 사람들은 전체 코드 블록의 이점을 누릴 수 있습니다.
StarWind0

7
indeterminateTint는 API 21 이상에서 사용할 수 있습니다. 그것이 당신에게 효과적이라면, 훌륭합니다!
앤디 와인 스타 인


14
android:indeterminateTint="@color/yellow"

이것은 나를 위해 일하고, progressBar xml 코드 에이 줄을 추가하십시오.


12

그것은 나를 위해 일한 것입니다.

<ProgressBar
android:id="@+id/ProgressBar01" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTint="@color/black"/>

4
API 레벨 21
viplezer

11

원형 ProgressBar를 사용자 정의하려면 undeterminateDrawable 을 작성하여 사용자 정의 진행 막대를 표시 해야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1">

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false">

        <size
            android:height="48dip"
            android:width="48dip" />

        <gradient
            android:centerColor="#f96047"
            android:centerY="0.50"
            android:endColor="#fb9c8d"
            android:startColor="#f72d0c"
            android:type="sweep"
            android:useLevel="false" />

    </shape>

</rotate>

다음과 같이 진행 표시 줄에 드로어 블을 포함해야합니다.

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_centerInParent="true"
    style="?android:attr/progressBarStyleLarge"
    android:visibility="visible"
    android:progressDrawable="@drawable/widget_progressbar"
    android:indeterminateDrawable="@drawable/widget_progressbar"
    android:layout_height="wrap_content" />

rotate전에 태그가 누락되었습니다 shape. 그것 없이는 진행률 표시 줄이 정체됩니다
Renan Bandeira

@RenanBandeira 당신은 정확한 경우 답변을 향상시킬 수 있습니다
Akshay Mukadam

9

나를 위해 테마는 accentColor와 함께 작동하지 않았습니다. 그러나 colorControlActivated와 함께 작동했습니다.

    <style name="Progressbar.White" parent="AppTheme">
        <item name="colorControlActivated">@color/white</item>
    </style>

  <ProgressBar
        android:layout_width="@dimen/d_40"
        android:layout_height="@dimen/d_40"
        android:indeterminate="true"
        android:theme="@style/Progressbar.White"/>

4

Muhamed Riyas M의 최고 투표 답변 을 보충하려면 :

빠른 회전

android:toDegrees="1080"

더 얇은 링

android:thicknessRatio="16"

라이트 화이트

android:endColor="#80ffffff"

4

답변 을 확인하십시오 .

나를 위해이 두 줄은 작동하고 색상을 변경하기 위해 있어야했습니다.

android:indeterminateTint="@color/yourColor"
android:indeterminateTintMode="src_in"

추신 :하지만 안드로이드 21에서만 사용할 수 있습니다


4

스타일을 사용 해보고 colorControlActivated 너무 원하는 ProgressBar 색상을 설정하십시오.

<style name="progressColor" parent="Widget.AppCompat.ProgressBar">
    <item name="colorControlActivated">@color/COLOR</item>
</style>

그런 다음 ProgressBar 테마를 새 스타일로 설정하십시오.

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/progressColor"
 />

3

활동 테마에 항목 colorControlActivated를 추가하십시오 ( 예 :

    <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            ...
            <item name="colorControlActivated">@color/rocket_black</item>
            ...
    </style>

매니페스트의 활동에이 스타일을 적용하십시오.

<activity
    android:name=".packege.YourActivity"
    android:theme="@style/AppTheme.NoActionBar"/>

2

다른 답변의 xml을 재사용하여 사용자 정의 대화 상자를 사용 하여이 작업을 쉽게 수행 할 수 있습니다.

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

<shape
    android:innerRadiusRatio="3"
    android:shape="ring"
    android:thicknessRatio="8"
    android:useLevel="false" >

    <size
        android:height="76dip"
        android:width="76dip" />

    <gradient
        android:angle="0"
        android:endColor="@color/oceanBlue"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

</shape>

그냥 이렇게 :

public static class ModifiedProgressDialog extends ProgressDialog {
    public ModifiedProgressDialog(Context context) {
        super(context);
    }

    @Override
    public void show() {
        super.show();
        setIndeterminateDrawable(getContext().getResources().getDrawable(R.drawable.blue_progress));
    }
}

2

아래와 같이 진행 색상을 변경하는 스타일을 사용할 수 있습니다

 <style name="AppTheme.anyName">
        <item name="colorAccent">YOUR_COLOR</item>
    </style>

아래와 같이 ProgressBar에서 사용하십시오.

<ProgressBar
            style="?android:attr/progressBarStyle"
            android:theme="@style/AppTheme.WhiteAccent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="@dimen/dimen_30"
        />

도움이 되길 바랍니다.


1

사용자 정의 진행 속도를 높이는 방법을 궁금해하는 모든 사람들에게

  <?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
android:toDegrees="1080"><!--HERE YOU COULD INCREASE SPEED BY SETTING TODEGRESS(1080 is 3 loops instead of 1 in same amt of time)-->
<shape android:shape="ring" android:innerRadiusRatio="3"
    android:thicknessRatio="8" android:useLevel="false">
    <size android:width="76dip" android:height="76dip" />
    <gradient android:type="sweep" android:useLevel="false"
        android:startColor="#447a29" 
        android:endColor="#447a29"
        android:angle="0"
         />
</shape>


0

변경하면 Res / Values ​​/ Colors.xml-> colorAccent에서 색상 값을 가져옵니다. progressBar 색상도 변경됩니다.


0

세트 android:indeterminateDrawable="@drawable/progress_custom_rotate"

사용자 정의 원형 링 진행률 표시 줄에 아래 코드 사용

아래 코드를 복사하여 Drawable 폴더에 "progress_custom_rotate.xml"을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
    android:toDegrees="1080">

    <shape android:shape="ring" android:innerRadiusRatio="3"
        android:thicknessRatio="8" android:useLevel="false">

        <size android:width="48dip" android:height="48dip" />

        <gradient android:type="sweep" android:useLevel="false"
            android:startColor="#4c737373" android:centerColor="#4c737373"
            android:centerY="0.50" android:endColor="#ffffd300" />

    </shape>

</rotate>

0
<style name="progressColor" parent="Widget.AppCompat.ProgressBar">
    <item name="colorControlActivated">@color/colorPrimary</item>
</style>


<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="250dp"
    android:theme="@style/progressColor"
    android:layout_height="250dp"
    android:layout_centerInParent="true" />

-1

아래 코드를 사용하여 진행률 표시 줄 색상을 변경할 수 있습니다.

progressBar.getProgressDrawable().setColorFilter(
    getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_IN);

색상 배열이 있다면?
프린스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.