动画师只能在Looper线程Android上运行

我正在尝试在任务完成时对某些内容进行动画处理。这里的问题是我收到此错误消息:

android.util.AndroidRuntimeException: Animators may only be run on Looper threads
   at android.animation.ValueAnimator.cancel(ValueAnimator.java:1004)
   at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:965)
   at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:921)
   at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:735)
   at com.design.zaton.prototypei.MainActivity$1$1.run(MainActivity.java:93)
   at java.lang.Thread.run(Thread.java:761)

该应用程序以前使用相同的精确代码运行良好,但现在它根本无法正常工作。我真的很困惑。

发生错误的位置如下:

new Thread(new Runnable() {
    @Override
    public void run() {
        final String s = getGiphyViews(String.valueOf(mEdit.getText()));
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                result.setText(s);
            }
        });

        loading.animate()
                .alpha(0)
                .setDuration(100);

        done.animate()
                .scaleY(1)
                .scaleX(1)
                .setDuration(300);
    }
}).start();

该错误概述了该方法。loading.animate()

提前致谢!


答案 1
runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //Your code
            }
});

您必须在 UI 线程中执行代码


答案 2

Looper 线程是 Android 中永久循环(或直到您取消它们)的线程。它们与处理程序结合使用,后者将向线程发布和发送消息。动画师大量使用Looper线程,因为它们在重复的循环中执行其操作。这允许动画师在您按“开始”后不阻止,以便您可以继续执行其他操作。Looper

更复杂的是,您很可能正在对对象执行动画。这些只能在主UI线程上运行(这恰好是它们中最大的线程)。因此,您无法像尝试的那样在单独的线程上运行这些动画。ViewLooper


推荐