Reputation: 7114
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);
}
There is one ImageView and it takes the whole screen, i want to figure how to wait until come.play(1) is done to play circle.play(1), like this circle plays first and then come plays out the rest of itself because come is a longer animation, i would like to know this also because i have more services i would like to start and stop along the way too, thank you for your time
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);
}
};
Upvotes: 0
Views: 326
Reputation: 658
Here is one way to implement your own 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.
}
};
It is always recommended that you first go through the Animation API comes with Android sdk, see if one that fits you before implementing your own.
HOPE THIS HELP.
Upvotes: 1