Android開発ノート(十五)フェードアウト動画TransitionDrawable
フェードアウトアニメーションといえば、補間アニメーションの中のAlphaAnimationを思い浮かべるかもしれませんが、この深浅アニメーションは透明度にグラデーション効果しかありません.つまり、1つの図形に対して深浅な色変換しかできません.AピクチャからBピクチャに徐々に変化したい場合、つまりフェードアウト(Fade-in and Fade-out)効果を実現するには、AlphaAnimationが十分ではないことは明らかです.
幸いにもAndoidは私たちの急いでいることを急いで、私たちの考えを考えて、Animationはだめで、Drawableが試してみることができます.前のブログはグラフィックの章で、ブロガーは以下のDrawableについて言及しました.
1、StateListDrawable:詳細はAndroid開発ノート(七)初識Drawableを参照
2、ShapeDrawable:詳細はAndroid開発ノート(八)不思議なshapeを参照
3、NinePatchDrawable:詳細はAndroid開発ノート(九)特別の.9画像を参照
実はDrawableは種類が多く、この3つだけではありません.Androidの開発ドキュメントをよく読むと、TransitionDrawableを見つけたかもしれません.TransitionDrawableは、フェードアウトされたアニメーション効果を実現するのに役立ちます.
くだらないことは言わないで、直接コードに行ってTransitionDrawableがどのように働いているかを見てみましょう.次のコードはAlphaAnimationとTransitionDrawableの両方を実現しており、この2つのアニメーション効果を比較するのに便利です.
以下はフェードアウトアニメーションの効果図です
ここで使用するフェードアウトアニメーションコードをダウンロードするには
幸いにもAndoidは私たちの急いでいることを急いで、私たちの考えを考えて、Animationはだめで、Drawableが試してみることができます.前のブログはグラフィックの章で、ブロガーは以下のDrawableについて言及しました.
1、StateListDrawable:詳細はAndroid開発ノート(七)初識Drawableを参照
2、ShapeDrawable:詳細はAndroid開発ノート(八)不思議なshapeを参照
3、NinePatchDrawable:詳細はAndroid開発ノート(九)特別の.9画像を参照
実はDrawableは種類が多く、この3つだけではありません.Androidの開発ドキュメントをよく読むと、TransitionDrawableを見つけたかもしれません.TransitionDrawableは、フェードアウトされたアニメーション効果を実現するのに役立ちます.
くだらないことは言わないで、直接コードに行ってTransitionDrawableがどのように働いているかを見てみましょう.次のコードはAlphaAnimationとTransitionDrawableの両方を実現しており、この2つのアニメーション効果を比較するのに便利です.
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener {
private ImageView iv_alpha;
private AlphaAnimation alphaAnimation;
private TransitionDrawable transitionDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_play1 = (Button) findViewById(R.id.btn_play1);
Button btn_play2 = (Button) findViewById(R.id.btn_play2);
btn_play1.setOnClickListener(this);
btn_play2.setOnClickListener(this);
iv_alpha = (ImageView) findViewById(R.id.iv_alpha);
// , ,
iv_alpha.setAlpha(0.0f);
alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(3000); //
alphaAnimation.setFillAfter(true); //
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_play1) {
iv_alpha.setImageResource(R.drawable.alpha_begin);
iv_alpha.setAlpha(1.0f);
iv_alpha.setAnimation(alphaAnimation);
alphaAnimation.start();
} else if (v.getId() == R.id.btn_play2) {
// Drawable ,
Drawable[] drawableArray = {
getResources().getDrawable(R.drawable.alpha_begin),
getResources().getDrawable(R.drawable.alpha_end)
};
transitionDrawable = new TransitionDrawable(drawableArray);
iv_alpha.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(3000);
}
}
}
以下はフェードアウトアニメーションの効果図です
ここで使用するフェードアウトアニメーションコードをダウンロードするには