Android 为Toast添加动画
2018-05-14 本文已影响117人
Zzzia
GitHub:ToastEx
![](https://img.haomeiwen.com/i3819473/b0e8e81bd940bd71.gif)
导入项目
Step 1. Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.Zzzia:ToastEx:1.0.1'
}
用法
基础用法,默认有图标+动画
ToastEx.error(context, "...").show();
ToastEx.success(context, "...").show();
ToastEx.info(context, "...").show();
ToastEx.warning(context, "...").show();
ToastEx.normal(context, "...").show();
可以深度定制自己的动画
加入自己的自定义view在后面介绍
//自定义图标的方法
ToastEx.custom(context
, "..."
, Toast.LENGTH_SHORT//时间
, ToastEx.NO_COLOR//背景颜色
, toastImage)//自定义图标
.show();
//自定义图标和文字的方法,若只需要自定义文字,图标传入null即可
ToastEx.custom(context
, new CustomText(context)//自定义文字
, Toast.LENGTH_SHORT
, ToastEx.NO_COLOR
, new InfoAnim(context))
.show();
//获取颜色和动画时长
public void setDuration(int duration);
public void setColor(int color);
修改默认效果
在任意地方使用即可
ToastEx.Config.getInstance()
.setErrorColor(@ColorInt int errorColor) // optional
.setInfoColor(@ColorInt int infoColor) // optional
.setSuccessColor(@ColorInt int successColor) // optional
.setWarningColor(@ColorInt int warningColor) // optional
.setTextColor(@ColorInt int textColor) // optional
.tintIcon(boolean tintIcon) // 是否显示图标
.setUseAnim(boolean useAnim) //是否显示动画
.setToastTypeface(@NonNull Typeface typeface) // optional
.setTextSize(int sizeInSp) // optional
.apply(); // 别忘使用这个方法
重置为默认效果
ToastEx.Config.reset();
自定义属于自己的动画效果
借鉴了很多Toasty和TastyToast的元素,Toasty没有动画效果,也很难自己去添加,而TastyToast有动画效果,却并不能运用在有特殊要求的项目中,于是自己写了ToastEx。
先了解一下toast的布局。就是一个LinearLayout,方向为横向,有一个基于ImageView的子布局和一个基于TextView的子布局,分别是ToastImage和ToastText,能够接收动画持续时长和颜色两个参数。
自定义过程就是重写onDraw方法,实现完毕后使用ToastEx.custom()即可实现自定义动画。
ToastEx.custom(context
, new CustomText(context)//自定义文字动画
, Toast.LENGTH_SHORT//时间
, ToastEx.NO_COLOR//背景颜色
, new InfoAnim(context))//自定义图标动画,可以不要
.show();
以app中的文字变色的动画举例
/**
* Created by zia on 2018/5/14.
* 文字渐变
*/
public class CustomText extends ToastText {
private int duration;
private boolean begin = false;
private int color = 0;
public CustomText(Context context) {
super(context);
}
@Override//重写该方法,获得动画最佳持续时间
public void setDuration(int duration) {
super.setDuration(duration);
this.duration = duration;
}
@Override//重写该方法,获得文字颜色
public void setColor(int color) {
super.setColor(color);
this.color = color;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!begin) {//一个颜色渐变的属性动画
begin = true;
ValueAnimator valueAnimator;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
valueAnimator = ValueAnimator.ofArgb(color, Color.RED);
} else {
valueAnimator = ValueAnimator.ofInt(color, Color.RED);
}
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
CustomText.this.color = (int) animation.getAnimatedValue();
postInvalidate();
}
});
// valueAnimator.setDuration(duration);
//为了显示渐变效果,把时间改为1s
valueAnimator.setDuration(1000);
valueAnimator.start();
}
setTextColor(color);//设置文字颜色
}
}