我刚刚遇到了创建我不理解的自定义进度条的问题。我使用common方法创建动画列表,然后将其应用到进度条:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item
android:drawable="@drawable/dw_pb_1"
android:duration="100"/>
<item
android:drawable="@drawable/dw_pb_2"
android:duration="100"/>
<item
android:drawable="@drawable/dw_pb_3"
android:duration="100"/>
</animation-list>
我将它应用于进度条:
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="150"
android:layout_height="150"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/dw_loader" />
但结果如下:
它在原始进度条旁边再次绘制drawable。如果我使用wrap_content到进度条的宽度和高度,这就是我得到的:
****解决方案?:我无法想象为什么但是如果我以编程方式设置drawable它可以工作......
答案 0 :(得分:1)
我有完全相同的问题。问题是ProgressBar
会尝试复制它的drawable它有更多的空间。如果没有足够的空间,分别进行裁剪。
您可以通过缩放项目来解决此问题:
<item android:duration="100">
<scale
android:drawable="@drawable/@drawable/dw_pb_1"
android:scaleGravity="center" />
</item>
重复每个项目。
答案 1 :(得分:0)
我可以通过提供适合我的自定义progressdialog课程帮助你。
MyProgressDialog.class
public class MyProgressDialog extends Dialog {
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message) {
return show(context, title, message, false);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate, boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}
public static MyProgressDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable, OnCancelListener cancelListener) {
MyProgressDialog dialog = new MyProgressDialog(context);
dialog.setTitle(title);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
/* The next line will add the ProgressBar to the dialog. */
dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
dialog.show();
return dialog;
}
public MyProgressDialog(Context context) {
super(context, R.style.NewDialog);
}
并使用它:
MyProgressDialog mProgress = MyProgressDialog.show(context, title, message);
同样拒绝:mProgress.dismiss();
如果您希望透明背景只有进展,请执行以下操作:
MyProgressDialog mProgress = MyProgressDialog.show(context, null, null);
使用它..
答案 2 :(得分:0)
您只需制作自己的自定义进度条即可。在res / drawable中,创建一个XML文件,将其命名为loading_indertiminate.xml,例如:
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading_spinner"
android:pivotX="50%"
android:pivotY="50%" />
而且,在您的布局中,只需为您的Progess栏进行此操作。
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:indeterminateDrawable="@drawable/loading_indertiminate" />
答案 3 :(得分:0)
自Android 6.0版(Marshmallow API Level 23)以来不再出现此问题。 对于以前的版本支持,@ wrecker提供的解决方案仍然有效。