// UI线程里初始化
mProgressBar = new ProgressBar(AppConfig.getContext());
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// 居中
params.gravity = Gravity.CENTER;
AppConfig.getMainActivity().addContentView(mProgressBar, params);
mProgressBar.setVisibility(View.INVISIBLE);
// handler里回调 显示 | 隐藏
case MSG_PROGRESSBAR_SHOW:
mProgressBar.setVisibility(View.VISIBLE);
break;
case MSG_PROGRESSBAR_HIDE:
// 多次请求时,只响应第一个HIDE消息
mHandler.removeMessages(MSG_PROGRESSBAR_SHOW);
mProgressBar.setVisibility(View.INVISIBLE);
break;
// 重画Progressbar的进度
1.indeterminate mode | 没有具体进度的进度条
1.1 定制动画文件
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/progress_my_style"
style="?android:attr/progressBarStyle"
/>
注:style="?android:attr/progressBarStyle" 这是默认样式 ,可换改
step2: 在drawable文件夹下建立progress_my_style.xml文件:内容可如下:
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_color"
android:pivotX="50%"
android:pivotY="50%"
/>
注意:
1. android:drawable="@drawable/spinner_color" 这里,你需要在drawable下建立spinner_color.png图片(自己画成你所想到的效果(渐变))
2. progress_my_style.xml文件内容参考至D:\andrirod\android-sdk-windows\platforms\android-7\data\res\drawable\ progress_medium_white.xml文件内容,(android:framesCount与android:frameDuratiion是frameworks内部的属性,无法直接使用,所以省略)
以上是在XML中直接定义,下面是我在代码里直接定义的:
mProgressBar.setIndeterminateDrawable(AppConfig.getResources().getDrawable(R.drawable.style_common_processbar));
style_common_processbar.xml还是需要定义在xml里的
<?xml version="1.0" encoding="UTF-8"?> <animated-rotate android:drawable="@drawable/icon" android:pivotX="50.0%" android:pivotY="50.0%" xmlns:android="http://schemas.android.com/apk/res/android"> </animated-rotate>
结果是就是用图片icon旋转来表示进度,图片制作参考 android的 drawable_hdpi 下的 spinner_black_48.png
1.2 定制颜色和形状
利用shape来定制颜色和形状
// 定制模式 mProgressBar.setIndeterminateDrawable(AppConfig.getResources().getDrawable(R.drawable.style_common_processbar));
style_common_processbar.xml
<?xml version="1.0" encoding="UTF-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="30" android:fromDegrees="0.0" android:toDegrees="360.0" android:pivotX="50.0%" android:pivotY="50.0%" android:repeatCount="infinite"> <shape android:shape="ring" android:innerRadiusRatio="3.2" android:thicknessRatio="5.333" android:useLevel="false"> <size android:height="16.0dip" android:width="16.0dip" /> <gradient android:startColor="#4cffffff" android:endColor="#ffff0000" android:useLevel="false" android:type="sweep" android:centerY="0.5" android:centerColor="#4cffffff" /> </shape> </rotate>
通过修改
android:shape=["rectangle" | "oval" | "line" | "ring"] 来修改形状
gradient来修改颜色属性
2.progress mode | 有百分比进度的进度条
代码调用:mProgressBar.setProgressDrawable(AppConfig.getResources().getDrawable(R.drawable.color));
color.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" android:drawable="@drawable/bg" /> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/secondary" /> <item android:id="@android:id/progress" android:drawable="@drawable/progress" /> </layer-list>