내 애니메이션이 작동하고 스레드가 끝나면 다음 화면의 의도가 실행되지만 애니메이션의 끝에서 실행되지 않습니다. AnimationListener's
콜백 (이 목록에 End 만 있음)에 대한 모든 로그 항목을 기록했지만 아무 것도 기록되지 않습니다.내 Android 애니메이션이 내 onAnimationEnd를 호출하지 않는 이유는 무엇입니까?
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"));
}
}
Thread.run 메서드에서 startActivity 호출을 제거하려고 시도했다고 가정하고 활동이 시작되지 않습니까? 그 경우가 아니라면, 내 추측은 onAnimationEnd가 호출되고 있다는 것입니다. 로그 메시지가 보이지 않는 것입니다. – MatrixFrog
게시자가 게시 한 모든 코드를 볼 수 없기 때문에 실제로 Android 휴대 전화에 있습니다. 하지만 슈퍼 클래스 메쏘드를 덮어 씌우기로되어있는 메소드에 항상 @Override를 넣어야합니다. 만약 당신이 서명을 어떻게 든 엉망이라면 컴파일러는 당신에게 – MatrixFrog