在AsyncTask中按钮显示加载动画,阻止UI

时间:2015-06-03 13:01:58

标签: android android-asynctask android-animation

我正在尝试实现一个按钮,当按下该按钮时,使用加载微调器更改其图像。以下是完成该任务的代码:

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"
/>

这完美无缺

Idle button

Loading

正确显示动画。

现在,我必须添加耗时的任务,我使用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而不是这种方法。我在这里错过了什么?

0 个答案:

没有答案