Animation not start immediately when the target view is out of window

Posted by funnything on Stack Overflow See other posts from Stack Overflow or by funnything
Published on 2010-06-14T10:59:32Z Indexed on 2010/06/14 11:02 UTC
Read the original article Hit count: 192

Filed under:

Hi.

When I apply some animation to the view, which is out of window, the animation not start immediately.

And then, I scroll the screen to show the animation target view, the animation will start.

I hope to the animation will start immediately when it apply. Any ideas?

Bellow is sample code. Thank you.

public class AnimationValidationActivity extends Activity {
   private ViewSwitcher _viewSwitcher;
   private Button _button;

   /**
    * utility method for animation
    */
   private Animation buildTranslateAnimation( float fromXDelta ,
float toXDelta , float fromYDelta , float toYDelta ) {
       Animation ret = new TranslateAnimation( fromXDelta ,
toXDelta , fromYDelta , toYDelta );
       ret.setDuration( 1000 );

       return ret;
   }

   /**
    * build view in place of layout.xml
    */
   private View buildView() {
       ScrollView ret = new ScrollView( this );
       ret.setLayoutParams( new
LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT ,
               LinearLayout.LayoutParams.WRAP_CONTENT ) );

       LinearLayout parent = new LinearLayout( this );
       parent.setLayoutParams( new
LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT ,
               LinearLayout.LayoutParams.WRAP_CONTENT ) );
       parent.setOrientation( LinearLayout.VERTICAL );
       ret.addView( parent );

       _viewSwitcher = new ViewSwitcher( this );
       _viewSwitcher.setLayoutParams( new
LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT ,
100 ) );
       parent.addView( _viewSwitcher );

       View spacer = new View( this );
       spacer.setLayoutParams( new
LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT ,
getWindow()
               .getWindowManager().getDefaultDisplay().getHeight() ) );
       parent.addView( spacer );

       _button = new Button( this );
       _button.setText( "button" );
       parent.addView( _button );

       return ret;
   }

   @Override
   public void onCreate( Bundle savedInstanceState ) {
       super.onCreate( savedInstanceState );
       setContentView( buildView() );

       _viewSwitcher.setFactory( new ViewSwitcher.ViewFactory() {
           @Override
           public View makeView() {
               TextView view = new
TextView( AnimationValidationActivity.this );
               view.setLayoutParams( new
ViewSwitcher.LayoutParams( ViewSwitcher.LayoutParams.FILL_PARENT ,
                       ViewSwitcher.LayoutParams.FILL_PARENT ) );
               view.setBackgroundColor( 0xffffffff );

               view.setText( "foobar" );

               return view;
           }
       } );

       _button.setOnClickListener( new View.OnClickListener() {
           @Override
           public void onClick( View v ) {

_viewSwitcher.setInAnimation( buildTranslateAnimation( _viewSwitcher.getWidth() ,
0 , 0 , 0 ) );

_viewSwitcher.setOutAnimation( buildTranslateAnimation( 0 , -
_viewSwitcher.getWidth() , 0 , 0 ) );

               int color = new Random().nextInt();

_viewSwitcher.getNextView().setBackgroundColor( 0xff000000 | color &
0xffffff );
               _viewSwitcher.showNext();
           }
       } );
   }
}

© Stack Overflow or respective owner

Related posts about android