AnimationDrawableの使い方を説明します。
AnimationDrawableは「画像」をリスト化し、設定した時間間隔で表示を切り替えます。
使いどころは、一定時間で画像を切り替える必要がある場合です。
例は「アイコンを一定間隔で切り替えてアニメーションしたい」や「ギャラリーで画像を切り替えたい」などなど。
xmlで設定する属性は下記の2つです。
- drawable:表示する画像
- duration:表示時間[ms]
今回はサンプルとして下記の仕様を持ったコードを作成しました。
- AnimationDrawableを使って表示する。
- xmlで50ms毎に画像を切り替える設定をする。
- Javaコードで1000ms表示する画像を設定をする。
- アニメーション停止中にボタンをクリックするとAnimationDrawableのアニメーションが開始します。
- アニメーション開始中にボタンをクリックするとAnimationDrawableのアニメーションが停止します。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:variablePadding="true"
android:oneshot="false">
<item
android:drawable="@android:drawable/ic_dialog_alert"
android:duration="50" />
<item
android:drawable="@android:drawable/ic_dialog_dialer"
android:duration="50" />
<item
android:drawable="@android:drawable/ic_dialog_email"
android:duration="50" />
<item
android:drawable="@android:drawable/ic_dialog_info"
android:duration="50" />
<item
android:drawable="@android:drawable/ic_dialog_map"
android:duration="50" />
</animation-list>
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setBackgroundColor(Color.BLACK);
linearLayout.setGravity(Gravity.CENTER_HORIZONTAL);
//AnimationDrawableを表示するImageView
final ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(500, 500));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//AnimationDrawableを設定する
imageView.setImageResource(R.drawable.animation_drawable);
//動的に画像を追加する
final AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_input_add);
animationDrawable.addFrame(new BitmapDrawable(getResources(), bitmap), 1000);
//AnimationDrawableのアニメーションを開始・停止するボタン
final Button button = new Button(getApplicationContext());
button.setText("アニメーション開始");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AnimationDrawable drawable = (AnimationDrawable) imageView.getDrawable();
if (drawable.isRunning()) {
//AnimationDrawableのアニメーションを停止する
drawable.stop();
button.setText("アニメーション開始");
} else {
//AnimationDrawableのアニメーションを開始する
drawable.start();
button.setText("アニメーション停止");
}
}
});
linearLayout.addView(imageView);
linearLayout.addView(button);
setContentView(linearLayout);
}
}