package com.justsystems.hpb.pad;
import android.content.Context;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
/**
*
* HoneyComb,ICS専用のActionBarクラス。
* <p>
* HoneyComb,ICSではAnimation後の {@link #setScaleType(ScaleType)}がうまく動作しない。<br>
* 回避のため、 {@link android.view.animation.Animation#setFillAfter(boolean)}で対応している。
* <br>
* 更に、ICSではアニメーション後に
* {@link #setBackgroundDrawable(android.graphics.drawable.Drawable)}
* が効かない不具合がある。<br>
* 回避策が見つからないため、今回はロゴを動かさない。
* <p>
* ロゴを動かす場合には {@link #MOVE_LOGO}をtrueにすれば良い。<br>
*
*/
public class ActionBarViewICS extends ActionBarView {
private static final boolean MOVE_LOGO = false;
public ActionBarViewICS(Context context) {
super(context);
if (!MOVE_LOGO) {
setScaleType(ScaleType.FIT_CENTER);
}
}
public void moveLogoCenter() {
if (MOVE_LOGO) {
setBackgroundDrawable(null);
this.moveCenterAnimation = new TranslateAnimation(0,
-getMoveLength(), 0, 0);
this.moveCenterAnimation.setDuration(ANIMATION_DURATION);
this.moveCenterAnimation.setFillAfter(true);
this.moveCenterAnimation.setAnimationListener(this);
startAnimation(this.moveCenterAnimation);
} else {
setImageResource(R.drawable.ic_actionbar_logo);
}
}
public void moveLogoRight() {
if (MOVE_LOGO) {
this.moveRightAnimation = new TranslateAnimation(0,
getMoveLength(), 0, 0);
this.moveRightAnimation.setDuration(ANIMATION_DURATION);
this.moveRightAnimation.setFillAfter(true);
this.moveRightAnimation.setAnimationListener(this);
startAnimation(this.moveRightAnimation);
} else {
setImageResource(R.drawable.ic_actionbar_logo_closed);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (animation == this.moveCenterAnimation) {
setScaleType(ScaleType.FIT_CENTER);
} else if (animation == this.moveRightAnimation) {
setScaleType(ScaleType.FIT_END);
setBackgroundDrawable(getResources().getDrawable(
R.drawable.ic_top_arrow_down_ics));
}
}
@Override
public void onConfigraionChanged() {
setAnimation(null);
requestLayout();
invalidate();
}
}