一、效果

二、代码
public class PZHelp_ProgressBar extends ProgressBar {
Paint paint;
Rect rect;
String string = "请稍等,正在加载......";
int viewwidth, viewheight;
public PZHelp_ProgressBar(Context context) {
super(context);
initView();
}
public PZHelp_ProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public PZHelp_ProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
void setText(String string){
this.string = string;
}
void initView() {
paint = new Paint();
rect = new Rect();
paint.setTextSize(32);
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.getTextBounds(string, 0, string.length(), rect);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
viewwidth = getMeasuredWidth() + rect.width();
viewheight = Math.max(getMeasuredHeight(), rect.height());
setMeasuredDimension(viewwidth, viewheight);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.scale(0.5f, 0.5f);
canvas.translate(getHeight() >> 1, getHeight() >> 1);
super.onDraw(canvas);
canvas.drawText(string, (getWidth() + getHeight()) >> 1, (getMeasuredHeight() + rect.height()) >> 1, paint);
}
}
三、总结
- 最初是因为官方推荐使用 ProgressBar 来代替 ProgressDialog,而 ProgressBar 并没有添加文字的功能,所以才自定义的。
- ProgressDialog是继承dialog,使用的是window,能够做到隔绝页面的用户操作,而ProgressBar 没有,但如果我也继续写一个window,那为何不直接用ProgressDialog呢?似乎有点鸡肋。
- 就当练习自定义View了,我还是接着用我 的dialog吧,下面是顺带的ViewGroup代码
四、附

<com.example.myview_tets.MyViewGroup
android:id="@+id/myViewGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请稍等,正在加载......" />
</com.example.myview_tets.MyViewGroup>
public class MyViewGroup extends ViewGroup {
int viewWidth, viewHeight;
public MyViewGroup(Context context) {
super(context);
}
public MyViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec, heightMeasureSpec);
viewWidth = 0;viewHeight = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
viewWidth = Math.max(viewWidth, child.getMeasuredWidth());
viewHeight = viewHeight + child.getMeasuredHeight();
}
setMeasuredDimension(viewWidth, viewHeight);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childtop = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
int childwidth = child.getMeasuredWidth();
int childheight = child.getMeasuredHeight();
int childleft = (viewWidth - childwidth) / 2;
child.layout(childleft, childtop, childleft + childwidth, childtop + childheight);
childtop += childheight;
}
}
}