Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用处理程序同步动画?_Java_Android - Fatal编程技术网

Java 如何使用处理程序同步动画?

Java 如何使用处理程序同步动画?,java,android,Java,Android,极地动物 public class Polar_Anim { private static ImageView animImage; boolean pauseAnim = false; static int timeCounter = 0; int timeToRefresh = 180; static int animImageCount = 3;

极地动物

public class Polar_Anim {
            private static ImageView animImage;

            boolean pauseAnim = false;
            static int timeCounter = 0;
            int timeToRefresh = 180;
            static int animImageCount = 3;

            public Polar_Anim(ImageView animImage){
                pauseAnim = false;
                timeCounter = 0;
                Polar_Anim.animImage = animImage;
            }

         Handler mHandlerToAnimate = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);

                    if(msg.what == 1){

                        switch (timeCounter) {
                        case 0:
                            animImage.setImageResource(R.drawable.polarbearmain1);
                            break;
                        case 1:
                            animImage.setImageResource(R.drawable.polarbearmain2);
                            break;
                        case 2:
                            animImage.setImageResource(R.drawable.polarbearmain3);
                            break;
                        default:
                            animImage.setImageResource(R.drawable.polarbearmain1);
                            break;
                        }

                        if(timeCounter <= (animImageCount-1)){
                            timeCounter++;
                        }



                    }
                };
            };

            private Runnable runnableToAnimate = new Runnable() {
                public void run() {
                    Message msg = new Message();
                    msg.what = 1;
                    mHandlerToAnimate.handleMessage(msg);
                    if(!pauseAnim){

                        mHandlerToAnimate.postDelayed(this, timeToRefresh);
                    }
                }

            };





        public void startPolarAnimation(){
            mHandlerToAnimate.post(runnableToAnimate);
        }

        public void stopPolarAnimation(){
            pauseAnim = true;
            if (mHandlerToAnimate != null) {
                mHandlerToAnimate.removeCallbacks(runnableToAnimate);
            }
        }

        public boolean isRunning(){
            return !pauseAnim;
        }
上面是我的动画代码。它工作正常,但问题是如果我连续播放1-2分钟,它将不会执行动画。它只显示单个图像。
为什么会这样

您不需要创建新消息,这样handleMessage代码就可以在可运行的环境中运行
    polarimg.setOnTouchListener(new OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                        polar_anim=new Polar_Anim(polarimg);

                        if(event.getAction()==MotionEvent.ACTION_DOWN)  {

                            int id=v.getId();

                            if(id==R.id.imgview_polar)
                            {
                                    if(!polar_anim.isRunning())
                                    polar_anim.startPolarAnimation();
                                    else
                                        polar_anim.stopPolarAnimation();
                        }
                            mainPlayer(R.raw.bubblebrew);
                        }
                        return false;
                    }
                });