タスクが完了したときに何かをアニメーション化しようとしています。ここでの問題は、このエラーメッセージが表示されることです。
_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()
メソッドの概要を説明しています。
前もって感謝します!
Handler
を使用して、これに対してsolutionがあったと思います。 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);
今日、この問題が発生し、上記の作業で問題は解決しました。この方法に問題がある場合は、誰からも連絡をもらいたいです。
runOnUiThread(new Runnable() {
@Override
public void run() {
//Your code
}
});
UIスレッドでコードを実行する必要があります
エラーが発生し、ネットワーク操作を行う場所にコードを配置する
new Handler().post(new Runnable() {
@Override
public void run() {
// add your code here
}
});
アクティビティでメインハンドラーインスタンスを作成し、ハンドルメッセージメソッドをオーバーライドできると思います。作業スレッドにハンドラーの引用を保存できます。作業が終了したら、ハンドラーを使用してメッセージを送信し、メッセージの処理メソッドでメッセージを受信できます。ハンドラメッセージメソッドなどからアニメーションを開始するには...