前言
用过系统自带的Toast的都知道,android自带的吐司比较难看,而且样式单一,最重要的是不能自由选择动画,这样的吐司很难用在一个精美的应用上,因此,我们来自行实现一个自定义的Toast:XToast,来取代系统自带的Toast。当然了,以下实现的自定义Toast是与系统Toast有区别的,下面会提到。
使用方式&预览
我们来看看怎么使用XToast,通过提供的一系列的set方法,可自行设置XToast的各种属性、样式等:
XToast.create(MainActivity.this)
.setText("Testing:This is a XToast....")
.setAnimation(AnimationUtils.ANIMATION_DRAWER) //抽屉式效果
.setDuration(XToast.XTOAST_SHORT)
.setOnDisappearListener(new XToast.OnDisappearListener() {
@Override
public void onDisappear(XToast xToast) {
Log.d("cylog","The XToast has disappeared..");
}
}).show();
接着这是实现的效果:
首先这是一个抽屉式效果的Toast:
这是一个缩放效果的Toast:
原理简述
其实实现原理很简单,是通过添加View来实现的,因为Toast实际上就是一个View,通过控制、修改View的不同属性,然后通过不同的动画效果使其更加生动绚丽地展现出来。
实现
首先,我们新建名为XToast.java文件,这也是我们的主要的类,
public class XToast {
private Context mContext;
private View mView;
private ViewGroup mViewGroup;
private ViewGroup mViewRoot;
private GradientDrawable mToastBackgound;
private LayoutInflater mInflater;
private TextView mTextView;
private String message;
private AnimatorSet mShowAnimatorSet;
private AnimatorSet mHideAnimatorSet;
private int mShowAnimationType;
private int mHideAnimationType;
private int mDuration;
private int mBackgroundColor;
private OnDisappearListener mOnDisappearListener;
public static final int XTOAST_LONG = 3500;
public static final int XTOAST_SHORT = 2000;
public interface OnDisappearListener{
void onDisappear(XToast xToast);
}
public XToast(Context context)
{
this.mContext = context;