简体   繁体   中英

Animation is not working perfectly using handler

I did animation using handler,First time it works perfectly as i want but after pause and resume of the animation , It gets hang and does not perform animation .

handler code:

public class AnimationWalrus {

private static ImageView animImage;

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

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

 Handler mHandlerToAnimate = new Handler()
{

        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if(msg.what == 1){

                switch (timeCounter) {
                case 0:
                    animImage.setImageResource(R.drawable.walrus1);
                    break;
                case 1:
                    animImage.setImageResource(R.drawable.walrus2);
                    break;
                case 2:
                    animImage.setImageResource(R.drawable.walrus3);
                    break;
                case 3:
                    animImage.setImageResource(R.drawable.walrus1);
                    break;
                case 4:
                    animImage.setImageResource(R.drawable.walrus2);
                    break;
                case 5:
                    animImage.setImageResource(R.drawable.walrus3);
                    break;
                case 6:
                    animImage.setImageResource(R.drawable.walrus1);
                    break;
                case 7:
                    animImage.setImageResource(R.drawable.walrus2);
                    break;
                case 8:
                    animImage.setImageResource(R.drawable.walrus3);

                    break;

                default:
                animImage.setImageResource(R.drawable.walrus1);
                //resetAnimation();
                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 startWalrusAnimation(){
        mHandlerToAnimate.post(runnableToAnimate);
    }

    public void stopWalrusAnimation(){
        System.out.println("In Stop..........");
        pauseAnim = true;
        if (mHandlerToAnimate != null) {
            mHandlerToAnimate.removeCallbacks(runnableToAnimate);
            mHandlerToAnimate.removeCallbacksAndMessages(null);
        }
    }

    public void resetAnimation()
    {
        System.out.println("In reset..........");
        stopWalrusAnimation();

        pauseAnim = false;
//      timeCounter = 0;

        //startWalrusAnimation();
    }

    public boolean isRunning(){
        return !pauseAnim;
    }

I am using code like this ,Initially animation works fine but after resume it get hang and does not perform animation .

Please suggest me how to solve this problem.

//Activity where i actually calling handler

imageWalrus = (ImageView)findViewById(R.id.imageViewWalrus);
        imageViewWalrus = (ImageView)findViewById(R.id.imageViewWalrus);
        //animWalrus = new AnimationWalrus(imageViewWalrus);
        //animWalrus.startWalrusAnimation();

        imageViewWalrus.setVisibility(View.INVISIBLE);
        imageViewWalrus.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent event) {
                // TODO Auto-generated method stub
                      //Creating object of animation walrus class  
                animWalrus = new AnimationWalrus(imageViewWalrus);
                if (event.getAction()==MotionEvent.ACTION_DOWN) {
                    int id=arg0.getId();
                    if (id==R.id.imageViewWalrus) {
                        if (!animWalrus.isRunning()) 
                        {
                                                   //Calling Handler
                            animWalrus.startWalrusAnimation();
                            animWalrus.resetAnimation();
                        }
                    }
                    mainPlayer(R.raw.walrussb);

                } 
                return false;
            }
        });

You should move your code from onCreate() to onResume() , your views are probobly getting destroyed some how and this makes you a problem. How ever I can't tell for sure without see all the activity code. But it is my best guess.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM