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 ..