我正在尝试实现一个按钮,当按下该按钮时,使用加载微调器更改其图像。以下是完成该任务的代码:
mButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.loading_spinner, 0);
Drawable progressAnimationLeft = mButton.getCompoundDrawables()[2];
Animatable animatable = ((Animatable) progressAnimationLeft);
animatable.start();
loading_spinner.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_action_refresh"
android:fromDegrees="720"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="0"
/>
这完美无缺
正确显示动画。
现在,我必须添加耗时的任务,我使用AsyncTask添加了该任务。
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
mButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.loading_spinner, 0);
Drawable progressAnimationLeft = mButton.getCompoundDrawables()[2];
Animatable animatable = ((Animatable) progressAnimationLeft);
animatable.start();
}
@Override
protected Void doInBackground(Void... voids) {
// Time consuming work
timeConsumingMethod();
return null;
}
};
task.execute();
但在这种情况下,动画会显示微调器图标,但随后会停止,直到timeConsumingMethod结束。
我已经读过,我可能需要使用ProgressBar
而不是这种方法。我在这里错过了什么?