Как изменить цвет в круговой индикатор выполнения?
Я использую круговой индикатор выполнения на Android. Я хочу изменить цвет этого. Я использую
"?android:attr/progressBarStyleLargeInverse"
стиль. Итак, как изменить цвет индикатора выполнения.
Как настроить стиль?? Кроме того, каково определение стиля??
спасибо заранее.
15 ответов:
в папку 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>
Set
startColor
иendColor
по вашему выбору .теперь установлено, что
progress.xml
на 'ы .такой
<ProgressBar android:id="@+id/ProgressBar01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@drawable/progress" />
1.Сначала создайте xml-файл в папке drawable в разделе resource
название "прогресс.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.затем сделайте панель progresss, используя фрагмент folloing
<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" />
для API 21 и выше. Просто установите свойство indeterminateTint. Например:
android:indeterminateTint="@android:color/holo_orange_dark"
для поддержки устройств pre-API 21:
mProgressSpin.getIndeterminateDrawable() .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN );
вы можете изменить цвет программно с помощью этого кода:
ProgressBar v = (ProgressBar) findViewById(R.id.progress); v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.MULTIPLY);
Если вы хотите изменить цвет ProgressDialog по прогрессбар, U может использовать этот :
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); } });
чтобы добавить к ответу Дато, я нахожу SRC_ATOP предпочтительным фильтром для умножения, поскольку он лучше поддерживает альфа-канал.
ProgressBar v = (ProgressBar) findViewById(R.id.progress); v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.SRC_ATOP);
для настройки круговой ProgressBar нам нужно создать indeterminateDrawable чтобы показать пользовательский индикатор выполнения
<?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>
мы должны включить drawable в progressbar так же, как ниже:
<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" />
стили.xml
<style name="CircularProgress" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/yellow</item> </style> <ProgressBar android:layout_width="@dimen/d_40" android:layout_height="@dimen/d_40" android:indeterminate="true" style="@style/Widget.AppCompat.ProgressBar" android:theme="@style/CircularProgress"/>
Это работа для меня.
<ProgressBar android:id="@+id/ProgressBar01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateTint="@color/black"/>
для меня тема не работала с 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"/>
добавить в вашу тему деятельности, пункт 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"/>
вы можете сделать это с помощью пользовательского диалога довольно легко, повторно используя 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)); } }
для всех тех, кто задается вопросом, Как увеличить скорость пользовательского прогресса
<?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>
Вы можете использовать стиль для изменения цвета прогресса, как показано ниже
<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" />
надеюсь, что это помогает.