动画师只能在 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() 方法。

提前致谢!

原文由 Adrien Zier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

我认为,使用 Handler 有一个 解决方案。您可以使用 postDelayed 最小为 100 并运行您的动画任务。在您的情况下,它将是:

 new Handler().postDelayed(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);
     }
}, 100);

我今天遇到了这个问题,上面的工作解决了这个问题。如果此方法有任何问题,我很乐意听取任何人的意见。

原文由 Guruprasad J Rao 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Davide 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题