Android 自定义进度条操作
Android custom Progress Bar manipulation
我在 Android 中使用自定义进度条时遇到了一些困难。也就是说,我有两个正确的自定义 ProgressBar 的 .xml 描述。
他们在这里:
custom_progress_bar_horizontal.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- @author : @
-->
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background">
<shape>
<corners
android:radius="0dip" />
<stroke
android:width="1dp"
android:color="#ff000000" />
<gradient
android:startColor="#ffEEEEEE"
android:centerColor="#ffEEEEEE"
android:centerY="0.50"
android:endColor="#ffEEEEEE"
android:angle="270" />
</shape>
</item>
<item
android:id="@android:id/progress">
<clip>
<shape>
<corners
android:radius="0dip" />
<stroke
android:width="1dip"
android:color="#ff000000" />
<gradient
android:startColor="#ff86CF10"
android:endColor="#ff86CF10"
android:angle="90" />
</shape>
</clip>
</item>
custom_progress_bar_hor_night.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- @author : @
-->
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background">
<shape>
<corners
android:radius="0dip" />
<stroke
android:width="1dp"
android:color="#ffffffff" />
<gradient
android:startColor="#ff000000"
android:centerColor="#ff000000"
android:centerY="0.50"
android:endColor="#ff000000"
android:angle="270" />
</shape>
</item>
<item
android:id="@android:id/progress">
<clip>
<shape>
<corners
android:radius="0dip" />
<stroke
android:width="1dip"
android:color="#ffffffff" />
<gradient
android:startColor="#ff86CF10"
android:endColor="#ff86CF10"
android:angle="90" />
</shape>
</clip>
</item>
如您所见,这些自定义进度条仅在背景颜色和形状线颜色方面有所不同。
现在,从 Android 应用程序(java 代码)切换这两个 .xml 文件(ProgressBar 设计)的最佳方法是什么?实际上,我想在按下应用程序屏幕上的按钮时切换 ProgressBar 设计。
我应该将两个 ProgressBar 实例放在一起并更改它们的可见性(一个可见另一个不可见,反之亦然),还是有更智能的方式来操作单个 ProgressBar 实例?
编辑:
我知道描述的方法 here。用户使用以下方法根据当前进度值在 ProgressBar 的三种不同 .xml 描述之间进行选择:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="2999" android:drawable="@drawable/progress_horizontal_red" />
<item android:maxLevel="4999" android:drawable="@drawable/progress_horizontal_yellow" />
<item android:maxLevel="10000" android:drawable="@drawable/progress_horizontal_green" />
</level-list>
我想实现非常相似的事情。唯一的区别是我不希望当前进度值改变我将在屏幕上看到的 .xml 文件。我希望能够通过按下按钮来更改 ProgressBar 设计。
我觉得 android:maxLevel="xxxx"
选择器应该更改为可以采用 true
或 false
值的东西。我会通过按下按钮来切换此 true/false
值。
如有任何建议,我们将不胜感激。
非常感谢您的时间和精力。
真诚的,
博扬.
您只需在代码中对 ProgressBar
调用 setProgressDrawable()
,无需两个进度条。
progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_horizontal));
progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_hor_night));
我在 Android 中使用自定义进度条时遇到了一些困难。也就是说,我有两个正确的自定义 ProgressBar 的 .xml 描述。 他们在这里:
custom_progress_bar_horizontal.xml:
<?xml version="1.0" encoding="UTF-8"?> <!-- @author : @ --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="0dip" /> <stroke android:width="1dp" android:color="#ff000000" /> <gradient android:startColor="#ffEEEEEE" android:centerColor="#ffEEEEEE" android:centerY="0.50" android:endColor="#ffEEEEEE" android:angle="270" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="0dip" /> <stroke android:width="1dip" android:color="#ff000000" /> <gradient android:startColor="#ff86CF10" android:endColor="#ff86CF10" android:angle="90" /> </shape> </clip> </item>
custom_progress_bar_hor_night.xml:
<?xml version="1.0" encoding="UTF-8"?> <!-- @author : @ --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="0dip" /> <stroke android:width="1dp" android:color="#ffffffff" /> <gradient android:startColor="#ff000000" android:centerColor="#ff000000" android:centerY="0.50" android:endColor="#ff000000" android:angle="270" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="0dip" /> <stroke android:width="1dip" android:color="#ffffffff" /> <gradient android:startColor="#ff86CF10" android:endColor="#ff86CF10" android:angle="90" /> </shape> </clip> </item>
如您所见,这些自定义进度条仅在背景颜色和形状线颜色方面有所不同。
现在,从 Android 应用程序(java 代码)切换这两个 .xml 文件(ProgressBar 设计)的最佳方法是什么?实际上,我想在按下应用程序屏幕上的按钮时切换 ProgressBar 设计。
我应该将两个 ProgressBar 实例放在一起并更改它们的可见性(一个可见另一个不可见,反之亦然),还是有更智能的方式来操作单个 ProgressBar 实例?
编辑:
我知道描述的方法 here。用户使用以下方法根据当前进度值在 ProgressBar 的三种不同 .xml 描述之间进行选择:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="2999" android:drawable="@drawable/progress_horizontal_red" />
<item android:maxLevel="4999" android:drawable="@drawable/progress_horizontal_yellow" />
<item android:maxLevel="10000" android:drawable="@drawable/progress_horizontal_green" />
</level-list>
我想实现非常相似的事情。唯一的区别是我不希望当前进度值改变我将在屏幕上看到的 .xml 文件。我希望能够通过按下按钮来更改 ProgressBar 设计。
我觉得 android:maxLevel="xxxx"
选择器应该更改为可以采用 true
或 false
值的东西。我会通过按下按钮来切换此 true/false
值。
如有任何建议,我们将不胜感激。
非常感谢您的时间和精力。
真诚的, 博扬.
您只需在代码中对 ProgressBar
调用 setProgressDrawable()
,无需两个进度条。
progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_horizontal));
progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_hor_night));