Ser*_*kov 5 android progressdialog
我有一个ProgressDialog,它是在Activity创建时启动的(insideOnCreate方法).
private void initDialog() {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setTitle("Please wait.");
mProgressDialog.setMessage("Connecting to LinkedIn.");
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
Run Code Online (Sandbox Code Playgroud)
在2500ms之后,我想将圆形动画更改为我的自定义图像(见下文)(就像我完成从服务器检索一些数据时的模拟,我完成了.)所以我需要向用户显示该过程已完成.为了这个目标,我选择了下一个方法.
这我有一个问题.当我第一次设置一个drawable
private void initDialog() {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setTitle("Please wait.");
mProgressDialog.setMessage("Connecting to LinkedIn.");
mProgressDialog.setCancelable(false);
//This
mProgressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.ok));
mProgressDialog.show();
}
Run Code Online (Sandbox Code Playgroud)
ProgressDialog改变drawable,看起来都很好.但是当ProgressBar启动(工作/循环动画播放)时,我尝试重置一个drawable
mProgressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.ok));
Run Code Online (Sandbox Code Playgroud)
我有意想不到的结果:圆形动画消失,没有图像设置为当前进度可绘制.没有图像!BLANK AREA而不是我的形象.
authButton.postDelayed(new Runnable() {
@Override
public void run() {
mProgressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.ok)); //doesn't work as expected!
}
}, 2500);
Run Code Online (Sandbox Code Playgroud)
需要改为 
ProgressDialog包含在ProgressBar哪里显示我们的drawable.
View view = inflater.inflate(a.getResourceId(com.android.internal.R.styleable.AlertDialog_horizontalProgressLayout, R.layout.alert_dialog_progress), null);
mProgress = (ProgressBar) view.findViewById(R.id.progress); // THIS
mProgressNumber = (TextView) view.findViewById(R.id.progress_number);
mProgressPercent = (TextView) view.findViewById(R.id.progress_percent);
setView(view);
Run Code Online (Sandbox Code Playgroud)
当我们再次设置drawable时ProgressDialog,ProgressDialog 确实设置了一个新的drawable.但是这个drawable没有边界(显示这个视图的坐标).
所以我们必须设置它.我选择一种复制方式 - 只是从当前可绘制的复制边界ProgressDialog.你可以用另一种方式.
private void initDialog() {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setTitle("Please wait.");
mProgressDialog.setMessage("Connecting to LinkedIn.");
mProgressDialog.setCancelable(false);
}
Run Code Online (Sandbox Code Playgroud)
mProgressDialog.show();
Run Code Online (Sandbox Code Playgroud)
private void changeToDone(int resId) {
//Getting a progressBar from dialog
ProgressBar bar = (ProgressBar) mProgressDialog.findViewById(android.R.id.progress);
//Getting a DONE(new) drawable from resources
Drawable drawable = getResources().getDrawable(resId);
//Getting a drawable from progress dialog
Drawable indeterminateDrawable = bar.getIndeterminateDrawable();
//Obtain a bounds of current drawable
Rect bounds = indeterminateDrawable.getBounds();
//Set bounds to DONE(new) drawable
drawable.setBounds(bounds);
//Set a new drawable
bar.setIndeterminateDrawable(drawable);
mProgressDialog.setTitle("Done.");
mProgressDialog.setMessage("Connected.");
}
Run Code Online (Sandbox Code Playgroud)
在特定情况下未经测试的解决方案,如
ActionBar/ 进度条TitleBarandroid.R.progress在屏幕上有一个窗口.在这种情况下,我认为我的解决方案将产生意外的行为.| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |