0

BlackBerryアプリで作成したボタンでアニメーションを使用したい。初めてボタンをクリックすると、アニメーションは正常に機能します。最初のクリックで、ボタンはアニメーションを開始します(点滅)。2回目のクリックで、点滅が停止します。ただし、ボタンをもう一度クリックすると(3回目)、点滅が再開されます。ただし、エラーが発生します。

App Error 104 Uncaught: IllegalStateException

ボタンを作成してアニメーションを追加するためのコードは次のとおりです。

 final Bitmap image000 = Bitmap.getBitmapResource("panic.png");
 final Bitmap image001 = Bitmap.getBitmapResource("panicon.png");

 final Timer animationTimer = new Timer();

 final BitmapField animationField = new BitmapField(image000,BitmapField.FOCUSABLE){

     protected boolean navigationClick(int status, int time)
     {
           if(flag){
                   animationTask.cancel();
                   flag=false;
           }else{
                   animationTimer.scheduleAtFixedRate(animationTask, 0, 100);
                   flag=true;
           }

        return true;
     }


 };

 animationTask = new TimerTask() {
     public void run() {
         if(counter == 0){
             animationField.setBitmap(image000);
         }
         if(counter == 1){
             animationField.setBitmap(image001);
             counter = -1;
         }

         counter++;
     }
 };


 add(animationField);

編集:コードをデバッグしましたが、スレッドを開始するループでエラーが発生します。スレッドをキャンセルするのは問題ないようです。何が問題なのか迷ってしまいました。ご案内ください。

4

1 に答える 1

1

これを試して -

TimerTask animationTask;
BitmapField animationField;
final Bitmap image000 = Bitmap.getBitmapResource("panic.png");
final Bitmap image001 = Bitmap.getBitmapResource("panicon.png");
final Timer animationTimer = new Timer();
animationField = new BitmapField(image000,BitmapField.FOCUSABLE){
    protected boolean navigationClick(int status, int time)
           {
             if(flag){
                 animationTask.cancel();
                 flag=false;
             }else{
                 animationTask = new TimerTask() {
                        public void run() {
                            if(counter == 0){
                                animationField.setBitmap(image000);
                            }
                            if(counter == 1){
                                animationField.setBitmap(image001);
                                counter = -1;
                            }
                    counter++;
                        }
                     };
                 animationTask.run();
                 animationTimer.scheduleAtFixedRate(animationTask, 0, 100);
                 flag=true;
             }

              return true;
           }


     };
 animationTask = new TimerTask() {
        public void run() {
            if(counter == 0){
                animationField.setBitmap(image000);
            }
            if(counter == 1){
                animationField.setBitmap(image001);
                counter = -1;
            }
counter++;
        }
     };

add(animationField);
于 2013-02-11T05:35:56.050 に答える