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 组件。

考虑在您的线程中使用处理程序。

您还可以在具有更新 UI 的方法的 AsyncTask 中进行后台处理。

编辑:一些解释:

UI = 用户界面。

您的活动在作为 UI 线程的主线程中运行。

除了 UI 线程,您不能修改 UI 组件(按钮、ImageView 等)。

当您创建 trd1 线程时,您试图从中修改 ImageView。这就是你得到错误的原因。

runOnUiThread()是您可以用来在 UI 线程而不是新创建的线程上进行修改的方法之一。

于 2012-07-06T20:40:55.443 回答