▼Androidメモ▼
ビューアニメーション


ビューアニメーションを行うプログラムを作成する。



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

sample.png

インターポレータ
インターポレータ 説明
AccelerateDecelerateInterpolator 遅い→早い→遅い
AccelerateInterpolator 遅い→早い
AnticipateInterpolator 反対方向へ少し→目的地
AnticipateOvershootInterpolator 反対方向へ少し→目的地→少し通り過ぎる→目的地
BounceInterpolator 目的地→バウンドしながら目的地
CycleInterpolator 目的地→開始位置→反対方向→開始位置
DecelerateInterpolator 早い→遅い
LinearInterpolator 等速
OvershootInterpolator 目的地→少し通り過ぎる→目的地
【参考】adakoda [Android] アニメーション補間クラスをグラフ化してみました

ソースコード
ViewAnimationEx.java
package net.npaka.viewanimationex;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.AnticipateOvershootInterpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.OvershootInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

//ボタンとダイアログ
public class ViewAnimationEx extends Activity implements
View.OnClickListener {
private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
private final static String TAG_TRANSLATE="translate";
private final static String TAG_SCALE ="scale";
private final static String TAG_ROTATE ="rotate";
private final static String TAG_ALPHA ="alpha";
private final static String TAG_SET ="set";
private ImageView imageView;

//アクティビティ起動時に呼ばれる
@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);

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

//ボタンの生成
layout.addView(makeButton("平行移動",TAG_TRANSLATE));
layout.addView(makeButton("拡大縮小",TAG_SCALE));
layout.addView(makeButton("回転",TAG_ROTATE));
layout.addView(makeButton("透過率",TAG_ALPHA));
layout.addView(makeButton("アニメーションセット",TAG_SET));
}

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

//ボタンの生成
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 (TAG_TRANSLATE.equals(tag)) {
TranslateAnimation trans=new TranslateAnimation(0,320, 0,0);
trans.setInterpolator(new OvershootInterpolator());
trans.setDuration(500);
imageView.startAnimation(trans);
}
//拡大縮小
else if (TAG_SCALE.equals(tag)) {
ScaleAnimation scale=new ScaleAnimation(1,2, 1,2, 120,120);
scale.setInterpolator(new AnticipateOvershootInterpolator());
scale.setDuration(500);
imageView.startAnimation(scale);
}
//回転
else if (TAG_ROTATE.equals(tag)) {
RotateAnimation rotate=new RotateAnimation(0,360, 120,120);
rotate.setInterpolator(new LinearInterpolator());
rotate.setDuration(500);
imageView.startAnimation(rotate);
}
//透過率(from,to)
else if (TAG_ALPHA.equals(tag)) {
AlphaAnimation alpha=new AlphaAnimation(1,0);
alpha.setDuration(500);
imageView.startAnimation(alpha);
}
//アニメーションセット
else if (TAG_SET.equals(tag)) {
AnimationSet set=new AnimationSet(true);
set.setInterpolator(new AnticipateOvershootInterpolator());

//拡大縮小
ScaleAnimation scale=new ScaleAnimation(1,2,1,2, 120,120);
scale.setDuration(500);
set.addAnimation(scale);

//平行移動
TranslateAnimation trans=new TranslateAnimation(0,320, 0,0);
trans.setDuration(500);
set.addAnimation(trans);

imageView.startAnimation(set);
}
}
}



−戻る−