public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.genie_out);
genie = (ImageView) findViewById(R.id.genieout);
startService(new Intent(this, MyService2.class));
SceneAnimation come = new SceneAnimation(genie, comingout, durationcomingout);
SceneAnimation circled = new SceneAnimation(genie, circle,durationcircle);
come.play(1);
circled.play(1);
}
有一个ImageView,它需要整个屏幕,我想知道如何等待come.play(1)完成播放circle.play(1),就像这个圆圈先播放然后播放,因为来的剩下的部分是一个较长的动画,我想也知道这一点,因为我有更多的服务,我想开始也跟着他们的方式停止,感谢您的时间等待ImageView中的一个动画停止启动另一个动画?
class SceneAnimation {
public int x;
public ImageView mImageView;
public int[] mFrameRess;
public int[] mDurations;
public int mDuration;
public int mLastFrameNo;
public long mBreakDelay;
public SceneAnimation(ImageView pImageView, int[] pFrameRess, int[] pDurations)
{
mImageView = pImageView;
mFrameRess = pFrameRess;
mDurations = pDurations;
mLastFrameNo = pFrameRess.length - 1;
play(1);
}
public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration){
mImageView = pImageView;
mFrameRess = pFrameRess;
mDuration = pDuration;
mLastFrameNo = pFrameRess.length - 1;
mImageView.setImageResource(mFrameRess[0]);
playConstant(1);
}
public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration, long pBreakDelay){
mImageView = pImageView;
mFrameRess = pFrameRess;
mDuration = pDuration;
mLastFrameNo = pFrameRess.length - 1;
mBreakDelay = pBreakDelay;
mImageView.setImageResource(mFrameRess[0]);
playConstant(1);
}
public void play(final int pFrameNo)
{
mImageView.postDelayed(new Runnable(){
public void run() {
mImageView.setImageResource(mFrameRess[pFrameNo]);
if(pFrameNo == mLastFrameNo)
{
return;}
else
play(pFrameNo + 1);
}
}, mDurations[pFrameNo]);
}
public void playConstant(final int pFrameNo){
mImageView.postDelayed(new Runnable(){
public void run() {
mImageView.setImageResource(mFrameRess[pFrameNo]);
if(pFrameNo == mLastFrameNo)
playConstant(0);
else
playConstant(pFrameNo + 1);
}
}, pFrameNo==mLastFrameNo && mBreakDelay>0 ? mBreakDelay : mDuration);
}
};
你可能应该使用'AnimationListener'。将animtionlistener设置为第一个动画,并在'onAnimationEnd'开始第二个动画。 – Wenhui
它不是一个动画类AnimationListener不知道什么时候结束,生病把代码放到SceneAnimation中我不知道如何让AnimationListener通过类运行,也许你可以帮助 – JRowan
我可能是错的,但是SceneAnimation看起来像Frame Animation 。你有没有考虑过使用['AnimationDrawable'](http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html),它支持逐帧动画。否则,您可以提供您自己的动画侦听器。我将在下面发布答案。 – Wenhui