1

_trd1 の起動時に例外が発生します。例外を与える理由。アニメーションを設定した imageView があります。_imageCard2 で行ったのと同じように、両方とも正常に動作しています...しかし、新しいスレッドを追加すると、完了後に例外が発生します。

public void AnimFunction() {

    TranslateAnimation animation2 = new TranslateAnimation(0, -50, 0, 0);
    animation2.setDuration(100); // duration in ms
    animation2.setRepeatCount(1);
    animation2.setRepeatMode(Animation.REVERSE);
    animation2.setFillAfter(false);
    _imageView.startAnimation(animation2);

    _imageView.setImageResource(R.drawable.b1fv);

    // Animation

    TranslateAnimation animation = new TranslateAnimation(0, 150, 0, 0);
    animation.setDuration(400); // duration in ms
    animation.setRepeatCount(1);
    animation.setRepeatMode(Animation.REVERSE);
    animation.setFillAfter(false);
    _imageCard2.startAnimation(animation);

    Thread _trd1 = new Thread() {
        public void run() {
            try {
                sleep(2000);
                _imageCard2.setImageResource(R.drawable.sk);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    _trd1.start();

}
4

2 に答える 2

5

試す:

Thread _trd1 = new Thread() {
        public void run() {
            try {
                sleep(2000);
                runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    _imageCard2.setImageResource(R.drawable.sk);
                }
            });

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
于 2012-07-06T20:40:50.573 に答える
0

UI スレッドとは異なるスレッドから UI コンポーネントを変更しようとしています。

スレッドで Handler を使用することを検討してください。

UI を更新する方法がある AsyncTask でバックグラウンド処理を行うこともできます。

編集:いくつかの説明:

UI = ユーザー インターフェイス。

アクティビティは、UI スレッドであるメイン スレッドで実行されます。

UI スレッド以外で UI コンポーネント (ボタン、ImageView など) を変更することはできません。

trd1 スレッドを作成したときに、そこから ImageView を変更しようとしました。そのため、エラーが発生しました。

runOnUiThread()新しく作成したスレッドではなく、UI スレッドで変更を行うために使用できる方法の 1 つです。

于 2012-07-06T20:40:55.443 に答える