3

アプリのスプラッシュ スクリーンを作成しようとしています。imagesview プロパティを変更してアニメーションを設定しようとすると、エラーが発生します。

runonuithread と Hadler をテストしましたが、この 2 つのケースではエラーは発生せず、画面には何も表示されず、遅延 (コードで指定したとおり) の後、プログラム アクティビティが次のアクティビティに切り替わります。これが私のコードです。

@Override
public void run(){
    try {
            TranslateAnimation moveLefttoRight = new TranslateAnimation(500, 0, 0, 0);
            moveLefttoRight.setDuration(5000);
            moveLefttoRight.setFillAfter(true);
            im.startAnimation(moveLefttoRight);//im is an image view
            SystemClock.sleep(6000);
            TranslateAnimation moveRighttoLeft = new TranslateAnimation(0, 100, 0, 0);
            moveRighttoLeft.setDuration(1000);
            moveRighttoLeft.setFillAfter(true);
            im.startAnimation(moveRighttoLeft);
            SystemClock.sleep(6000);
            ScaleAnimation scale = new ScaleAnimation(0.3f, 1f, 0.3f, 1f, 
                    ScaleAnimation.RELATIVE_TO_SELF, 0f, 
                    ScaleAnimation.RELATIVE_TO_SELF, 0f);
            scale.setDuration(1000);
            scale.setFillAfter(true);
            // Wait given period of time or exit on touch

            sig.startAnimation(scale);//sig is an image view

            SystemClock.sleep(2000);

    }

この奇妙なエラーを修正するにはどうすればよいですか?

4

1 に答える 1

0

私はあなたのコードを試しましたが、問題はありません。ビューを変更するときは、UI/メインスレッドで変更する必要があります。私が編集したコードを試すことができます:

TranslateAnimation moveLefttoRight = new TranslateAnimation(500, 0, 0,
        0);
moveLefttoRight.setDuration(5000);
moveLefttoRight.setFillAfter(true);
bt1.startAnimation(moveLefttoRight);// im is an image view

moveLefttoRight.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        doAnim2(); // do the next animation
    }
});
于 2012-10-25T04:35:14.297 に答える