▼Androidメモ▼
アクティビティ起動アニメーション


アクティビティ起動アニメーションを行うプログラムを作成する。



リソース
「res/drawable-nodpi」に「sample.png」を配置。

sample.png

「res/anim」に「zoom_enter.xml」と「zoom_exit.xml」を配置。
zoom_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator" >
<scale
android:duration="@android:integer/config_mediumAnimTime"
android:fromXScale="2.0"
android:fromYScale="2.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>

zoom_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top" >
<scale
android:duration="@android:integer/config_mediumAnimTime"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="0.5"
android:toYScale="0.5" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

ソースコード
LaunchAnimationEx.java
package net.npaka.launchanimationex;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;

//アクティビティ起動アニメーション
public class LaunchAnimationEx extends Activity implements
View.OnClickListener {
private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
private final static String
BUTTON_DEFAULT ="button_default",
BUTTON_SCALEUP ="button_scaleup",
BUTTON_THUMBNAIL="button_thumbnail",
BUTTON_CUSTOM ="button_custom";

//アクティビティ起動時に呼ばれる
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
requestWindowFeature(Window.FEATURE_NO_TITLE);

//レイアウトの生成
LinearLayout layout=new LinearLayout(this);
layout.setBackgroundColor(Color.WHITE);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);

//ボタンの生成
layout.addView(makeButton("デフォルト",BUTTON_DEFAULT));
layout.addView(makeButton("スケールアップ",BUTTON_SCALEUP));
layout.addView(makeButton("サムネイルスケールアップ",BUTTON_THUMBNAIL));
layout.addView(makeButton("カスタム",BUTTON_CUSTOM));
}

//ボタンの生成
private Button makeButton(String text,String tag) {
Button button=new Button(this);
button.setText(text);
button.setTag(tag);
button.setOnClickListener(this);
button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
return button;
}

//ボタンクリック時に呼ばれる
public void onClick(View view) {
String tag=(String)view.getTag();
//デフォルトアニメーション
if (BUTTON_DEFAULT.equals(tag)) {
Intent intent=new Intent(this,MyActivity.class);
startActivity(intent);
}
//スケールアップアニメーション
else if (BUTTON_SCALEUP.equals(tag)) {
ActivityOptions opts=ActivityOptions.makeScaleUpAnimation(
view,0,0,view.getWidth(),view.getHeight());
startActivity(new Intent(this,MyActivity.class),
opts.toBundle());
}
//サムネイルスケールアップアニメーション
else if (BUTTON_THUMBNAIL.equals(tag)) {
//ボタン押下のビットマップ生成
view.setDrawingCacheEnabled(true);
view.setPressed(false);
view.refreshDrawableState();
Bitmap bmp=view.getDrawingCache();

//サムネイルスケールアップアニメーションによるアクティビティ起動
ActivityOptions opts=ActivityOptions.makeThumbnailScaleUpAnimation(
view,bmp,0,0);
startActivity(new Intent(this,MyActivity.class),
opts.toBundle());

//キャッシュ無効化
view.setDrawingCacheEnabled(false);
}
//カスタムアニメーション
else if (BUTTON_CUSTOM.equals(tag)) {
ActivityOptions opts=ActivityOptions.makeCustomAnimation(
this,R.anim.zoom_enter,R.anim.zoom_exit);
startActivity(new Intent(this,MyActivity.class),
opts.toBundle());
}
}
}

MyActivityEx.java
package net.npaka.launchanimationex;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;

//自作アクティビティ
public class MyActivity extends Activity {
private final static int MP=LinearLayout.LayoutParams.MATCH_PARENT;

//アクティビティ起動時に呼ばれる
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
requestWindowFeature(Window.FEATURE_NO_TITLE);

//レイアウトの生成
LinearLayout layout=new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);

//イメージビューの生成
ImageView imageView=new ImageView(this);
imageView.setImageBitmap(res2bmp(this,R.drawable.sample));
imageView.setLayoutParams(new LinearLayout.LayoutParams(MP,MP));
layout.addView(imageView);
}

//リソース→ビットマップ
public static Bitmap res2bmp(Context context,int resID) {
return BitmapFactory.decodeResource(
context.getResources(),resID);
}
}



−戻る−