你是否已经厌倦了系统自带的那个环形进度条,看着别人那种花式进度条羡慕不已呢?不要着急,本文介绍的就是如何自定义进度条。
先上效果图
首先我们需要准备一张你需要作为进度条的图片,这里我们随便找了一张。
然后我们可以开始定制的过程了。
- 先写一个布局文件用来显示我们的进度条。
<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">
<ProgressBar
android:id="@+id/progressbar"
style="@style/myProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></ProgressBar>
</LinearLayout>
可以从代码中看到,我们在progress中使用了自己定义的属性,然而我们平时使用的进度条使用的都是系统自带的属性。那么在这个自定义的style中使用了什么属性呢?
<style name="myProgress">
<item name="android:indeterminateDrawable">@drawable/myprogress</ item>
</style>
很简单,这里只是使用了indeterminateDrawable的属性,他的作用就是设置绘制不显示进度条的Drawabled对象。我们在drawable中绘制我们我们的progressDrawable对象
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/perm_group_sync_settings"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360"></rotate>
很熟悉,这个好像就是我们平时使用的旋转的动画,只不过我们动画是存放在res/anim目录下的,而这个Drawable对象是存放在res/drawable目录下的,虽然他们的根节点都是rotate。还有最主要的一个区别就是在里面定义了drawable属性,用了我们刚才找到的那张显示进度条的图片。
主布局很简单,只有一个按钮,点击一下,就出来了一个进度条。我就不写了。
开始写DialogFragment!
创建dialogFragment有两种方式,
public class ProgressFragmentDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return super.onCreateDialog(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
View v = inflater.inflate(R.layout.progress, null);
return v;
}
}
这里我使用了onCreateView的方式创建Fragment,然后我们在代码中设置。
ProgressFragmentDialog dialogFragment = new ProgressFragmentDialog();
dialogFragment.show(getFragmentManager(), "progress");
这样运行一下我们的程序就可以看到效果了。