package cn.mutils.app.ui; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.util.AttributeSet; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.TextView; public class InfoToast extends TextView { protected Animation mFadeInAnim; protected Animation mFadeOutAnim; protected CharSequence mText; protected int mDuration; protected Handler mHandler; protected Runnable mShowRunable; protected Runnable mHideRunable; protected boolean mVisibleInvalidate; public InfoToast(Context context) { super(context); this.init(context, null); } public InfoToast(Context context, AttributeSet attrs) { super(context, attrs); this.init(context, attrs); } public InfoToast(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.init(context, attrs); } public void init(Context context, AttributeSet attrs) { this.setVisibility(View.INVISIBLE); mFadeInAnim = new AlphaAnimation(0, 1); mFadeInAnim.setDuration(300); mFadeInAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { if (mVisibleInvalidate) { setVisibility(View.VISIBLE); mVisibleInvalidate = false; } } }); mFadeOutAnim = new AlphaAnimation(1, 0); mFadeOutAnim.setDuration(300); mFadeOutAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { if (mVisibleInvalidate) { setVisibility(View.INVISIBLE); mVisibleInvalidate = false; } } }); mHandler = new Handler(Looper.getMainLooper()); mShowRunable = new Runnable() { public void run() { show(mText, mDuration); } }; mHideRunable = new Runnable() { public void run() { hide(); } }; } public void show(CharSequence text, int duration, int delay) { mVisibleInvalidate = true; mHandler.removeCallbacksAndMessages(null); if (!isEnabled()) { return; } if (delay > 0) { mText = text; mDuration = duration; mHandler.postDelayed(mShowRunable, delay); } else { setText(text); startAnimation(mFadeInAnim); if (duration > 0) { mHandler.postDelayed(mHideRunable, duration); } } } public void show(CharSequence text, int duration) { show(text, duration, 0); } public void show(CharSequence text) { show(text, 0); } public void show(int resid, int duration, int delay) { show(getContext().getString(resid), duration, delay); } public void show(int resid, int duration) { show(resid, duration, 0); } public void show(int resid) { show(resid, 0); } public void hide(int delay) { mVisibleInvalidate = true; mHandler.removeCallbacksAndMessages(null); if (delay > 0) { mHandler.postDelayed(mHideRunable, delay); } else if (getVisibility() == View.VISIBLE) { startAnimation(mFadeOutAnim); } } public void hide() { hide(0); } public void hideNow() { mVisibleInvalidate = false; mHandler.removeCallbacksAndMessages(null); if (getVisibility() == View.VISIBLE) { clearAnimation(); setVisibility(View.INVISIBLE); } } }