Android view rotation not happening after a few setAnimation calls Android view rotation not happening after a few setAnimation calls multithreading multithreading

Android view rotation not happening after a few setAnimation calls


The problem was that it was not running on the main thread, to fix it we used:

anim = new RotateAnimation( m_lastAngle,                                sfAngle,                                viewNeedle.getWidth() / 2,                                viewNeedle.getHeight());    anim.setDuration(1000);    anim.setFillAfter(true);    viewNeedle.setAnimation(anim);    anim.setAnimationListener(new AnimationListener()    {        @Override        public void onAnimationEnd(final Animation animation)        {            // viewNeedle.clearAnimation();        }        @Override        public void onAnimationRepeat(final Animation animation)        {            // TODO Auto-generated method stub        }        @Override        public void onAnimationStart(final Animation animation)        {            m_lastAngle = sfAngle;        }    });    runOnUiThread(new Runnable()    {        @Override        public void run()        {            viewNeedle.startAnimation(anim);            findViewById(android.R.id.content).invalidate();        }    });

Also we used:

    final View viewNeedle = findViewById(R.id.needle);    viewNeedle.getViewTreeObserver().addOnGlobalLayoutListener(            new OnGlobalLayoutListener()            {                @Override                public void onGlobalLayout()                {                    scaleView(viewNeedle);                }                /**                 * Scale a view.                 *                  * @param viewToScale - View to scale.                 */                private void scaleView(final View viewToScale)                {                    int height = (int) (viewToScale.getHeight() / GraphicsPoint                            .getScalePoint().y);                    int width = (int) (viewToScale.getWidth() / GraphicsPoint                            .getScalePoint().x);                    final LayoutParams layoutParams = viewToScale                            .getLayoutParams();                    layoutParams.height = height;                    layoutParams.width = width;                    viewToScale.setLayoutParams(layoutParams);                    viewToScale.getViewTreeObserver()                            .removeOnGlobalLayoutListener(this);                }            });


I tried to use your code and it works to call animation many times later .. I add this code to be called when rotation comes to end :

..                viewNeedle.startAnimation(anim);                anim.start();..

so to make a repeated animation it will be just like this:

 @Override            public void onAnimationEnd(final Animation animation)            {                viewNeedle.clearAnimation();                viewNeedle.startAnimation(anim);                anim.start();            }

so I can call that animation more than one time ..

hope that will help you ..