Reputation: 8794
My animation works and when the thread ends, the intent for the next screen fires, but it won't fire from the end of the animation. I put log entries for all of the AnimationListener's
callbacks (only End is in this listing), but none get logged.
public class PromoActivity extends Activity implements AnimationListener {
protected boolean _active = true;
protected int _splashTime = 5000; // time to display the splash screen in ms
private static final float ROTATE_FROM = 0.0f;
private static final float ROTATE_TO = -10.0f * 360.0f;// 3.141592654f * 32.0f;
private static final String TAG = "PromoActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread promoThread = new Thread() {
@Override
public void run() {
try {
ImageView favicon = (ImageView) findViewById(R.id.favicon);
RotateAnimation r; // = new RotateAnimation(ROTATE_FROM, ROTATE_TO);
r = new RotateAnimation(ROTATE_FROM, ROTATE_TO, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
r.setDuration((long) 2*1500);
favicon.startAnimation(r);
RotateAnimation q;
q = new RotateAnimation(ROTATE_FROM, -ROTATE_TO, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
q.setDuration((long) 2*1500);
q.setRepeatCount(0);
TextView mobiText = (TextView) findViewById(R.id.logotext_mobi);
mobiText.startAnimation(q);
TextView dawgText = (TextView) findViewById(R.id.logotext_bob);
dawgText.startAnimation(q);
int waited = 0;
while (_active && (waited < _splashTime)) {
sleep(100);
if (_active) {
waited += 100;
}
}
} catch (InterruptedException ex) {
} finally {
finish();
startActivity(new Intent("com.mobibob.promo.AboutActivity"));
stop();
}
}
};
promoThread.start();
}
@Override
public void onAnimationEnd(Animation animation) {
Log.d(TAG, "onAnimationEnd");
startActivity(new Intent("com.mobibob.promo.AboutActivity"));
}
}
Upvotes: 2
Views: 4707
Reputation: 41972
You're not calling Animation#setAnimationListener
anywhere. You need to call r.setAnimationListener(PromoActivity.this)
and/or q.setAnimationListener(PromoActivity.this)
for the listener to be called.
Something to keep in mind is that you have two animations and they may not finish at exactly the same time. So you probably want to keep track of how many times your listener was called and only call startActivity
when the number of animations that was supposed to end has been reached.
Upvotes: 2