0

我想在我在 BlackBerry 应用程序中创建的按钮上使用动画。当我第一次单击按钮时,动画效果很好。第一次单击时,按钮开始动画(闪烁)。在第二次单击时闪烁停止。但是,当我再次单击该按钮(第三次)时,应该会再次开始闪烁。但是,我收到一个错误:

App Error 104 Uncaught: IllegalStateException

创建Button和添加动画的代码如下:

 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 回答