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),就像这个圈子首先播放然后来播放剩下的本身因为来是一个更长的动画,我想知道这也是因为我有更多的服务我想开始和停止一路上,谢谢你的时间
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);
}
};
答案 0 :(得分:1)
这是实现自己的AnimationListener
的一种方法package com.example.intentfiletersample;
import android.widget.ImageView;
class SceneAnimation {
public int x;
public ImageView mImageView;
public int[] mFrameRess;
public int[] mDurations;
public int mDuration;
public int mLastFrameNo;
public long mBreakDelay;
private AnimationListener mAnimationListener;
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 setAnimationListener(AnimationListener listener){
this.mAnimationListener = listener;
}
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 );
// Callback when animation ends.
if( mAnimationListener != null ){
mAnimationListener.onAnimationEnd();
}
}
}, 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 );
// Callback when animation ends.
if( mAnimationListener != null ){
mAnimationListener.onAnimationEnd();
}
}
}, pFrameNo == mLastFrameNo && mBreakDelay > 0 ? mBreakDelay : mDuration );
}
public static interface AnimationListener {
public void onAnimationEnd();
// You can add onAnimationStart(), and do the same thing like onAnimationEnd.
}
};
始终建议您首先浏览Android sdk附带的Animation API,看看是否适合您,然后再实现自己的。
希望得到帮助。