AnimationPlayerActivity.java :  » Port » replicaisland-plus-text » com » replica » replicaisland » Android Open Source

Android Open Source » Port » replicaisland plus text 
replicaisland plus text » com » replica » replicaisland » AnimationPlayerActivity.java
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package com.replica.replicaisland;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;


public class AnimationPlayerActivity extends Activity {
  public static final int KYLE_DEATH = 0;
  public static final int WANDA_ENDING = 1;
  public static final int KABOCHA_ENDING = 2;
  public static final int ROKUDOU_ENDING = 3;
  
  private AnimationDrawable mAnimation;
  private int mAnimationType;
  private long mAnimationEndTime;
  
  private KillActivityHandler mKillActivityHandler = new KillActivityHandler();

    class KillActivityHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
          AnimationPlayerActivity.this.finish();
        }

        public void sleep(long delayMillis) {
          this.removeMessages(0);
            sendMessageDelayed(obtainMessage(0), delayMillis);
        }
    };
    
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        
    final Intent callingIntent = getIntent();
    mAnimationType = callingIntent.getIntExtra("animation", KYLE_DEATH);
    
    if (mAnimationType == KYLE_DEATH) {
      setContentView(R.layout.animation_player);
  
      ImageView canvasImage = (ImageView) findViewById(R.id.animation_canvas);
      canvasImage.setImageResource(R.anim.kyle_fall);
      mAnimation = (AnimationDrawable) canvasImage.getDrawable();
    } else {
      
      
      if (mAnimationType == WANDA_ENDING || mAnimationType == KABOCHA_ENDING) {
        float startX = 0.0f;
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        if (mAnimationType == WANDA_ENDING) {
          setContentView(R.layout.good_ending_animation);
          startX = 200 * metrics.density;
         
        } else {
          setContentView(R.layout.kabocha_ending_animation);
          startX = -200 * metrics.density;
        }
        
        // HACK
        // the TranslateAnimation system doesn't support device independent pixels.
        // So for the Wanda ending and Kabocha endings, in which the game over text
        // scrolls in horizontally, compute the size based on the actual density of
        // the display and just generate the anim in code.  The Rokudou animation
        // can be safely loaded from a file.
        Animation gameOverAnim = new TranslateAnimation(startX, 0, 0, 0);
        gameOverAnim.setDuration(6000);
        gameOverAnim.setFillAfter(true);
        gameOverAnim.setFillEnabled(true);
        gameOverAnim.setStartOffset(8000);
        
        View background = findViewById(R.id.animation_background);
        View foreground = findViewById(R.id.animation_foreground);
        View gameOver = findViewById(R.id.game_over);

        Animation foregroundAnim = AnimationUtils.loadAnimation(this, R.anim.horizontal_layer2_slide);
        Animation backgroundAnim = AnimationUtils.loadAnimation(this, R.anim.horizontal_layer1_slide);
        
        background.startAnimation(backgroundAnim);
        foreground.startAnimation(foregroundAnim);
        gameOver.startAnimation(gameOverAnim);
        
        mAnimationEndTime = gameOverAnim.getDuration() + System.currentTimeMillis();
      } else if (mAnimationType == ROKUDOU_ENDING) {
        setContentView(R.layout.rokudou_ending_animation);
        View background = findViewById(R.id.animation_background);
        View sphere = findViewById(R.id.animation_sphere);
        View cliffs = findViewById(R.id.animation_cliffs);
        View rokudou = findViewById(R.id.animation_rokudou);
        View gameOver = findViewById(R.id.game_over);

        
        Animation backgroundAnim = AnimationUtils.loadAnimation(this, R.anim.rokudou_slide_bg);
        Animation sphereAnim = AnimationUtils.loadAnimation(this, R.anim.rokudou_slide_sphere);
        Animation cliffsAnim = AnimationUtils.loadAnimation(this, R.anim.rokudou_slide_cliffs);
        Animation rokudouAnim = AnimationUtils.loadAnimation(this, R.anim.rokudou_slide_rokudou);
        Animation gameOverAnim = AnimationUtils.loadAnimation(this, R.anim.rokudou_game_over);

        background.startAnimation(backgroundAnim);
        sphere.startAnimation(sphereAnim);
        cliffs.startAnimation(cliffsAnim);
        rokudou.startAnimation(rokudouAnim);
        gameOver.startAnimation(gameOverAnim);
        mAnimationEndTime = gameOverAnim.getDuration() + System.currentTimeMillis();
      } else {
        assert false;
      }
      
    }
    
  }
  
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    long time = System.currentTimeMillis();
    if (time > mAnimationEndTime) {
      finish();
    } else {
      try {
        Thread.sleep(32);
      } catch (InterruptedException e) {
        // Safe to ignore.
      }
    }
    return true;
  }

  @Override
  public void onWindowFocusChanged(boolean hasFocus) {
    if (hasFocus && mAnimation != null) {
      mAnimation.start();
      mKillActivityHandler.sleep(mAnimation.getDuration(0) * mAnimation.getNumberOfFrames());
    }
  }
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.