Android仿一点资讯收藏Toast动画效果(给Toast添加动画效果)

最近在做一个项,有一个收藏的功能。后来看到了一点资讯的收藏动画,可上下弹跳,并在屏幕中央显示。感觉不错,所有自己就实现了一下。

这是效果:

这里写图片描述

附上完整的代码,其中Animation_Toast为动画:

public class CollectToast {

    private static CollectToast toastCollectSucceed = null;

    private Toast toast = null;
    private TextView text;

    private CollectToast() {}

    /**
     * 单例模式
     *
     * @return
     */
    public static CollectToast createToast() {
        if (toastCollectSucceed == null) {
            toastCollectSucceed = new CollectToast();
        }
        return toastCollectSucceed;
    }

    /**
     * 显示Toast
     *
     * @param context
     * @param root
     * @param tvString
     * @param result 是否成功
     */

    public Toast showToast(Context context, ViewGroup root, String tvString, int duration, boolean result) {
        toast = null;
        int styleId = R.style.Animation_Toast;
        if (toast == null) {
            View layout = LayoutInflater.from(context).inflate(R.layout.toast_collect_layout, root);
            text = (TextView) layout.findViewById(R.id.title_tv);
            ImageView imageView = (ImageView) layout.findViewById(R.id.iv);
            if (result)
                imageView.setBackgroundDrawable(DrawableUtil.getImageDrawable(context, R.mipmap.doneicon_popup_textpage));
            else
                imageView.setBackgroundDrawable(DrawableUtil.getImageDrawable(context, R.mipmap.close_popup_textpage));
            text.setText(tvString);
            toast = new Toast(context);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.setDuration(duration);
            toast.setView(layout);
            toast.show();
        } else {
            text.setText(tvString);
            toast.show();
        }
        //通过反射给Toast设置动画
        try {
            Object mTN = null;
            mTN = getField(toast, "mTN");
            if (mTN != null) {
                Object mParams = getField(mTN, "mParams");
                if (mParams != null
                        && mParams instanceof WindowManager.LayoutParams) {
                    WindowManager.LayoutParams params = (WindowManager.LayoutParams) mParams;
                    params.windowAnimations = styleId;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return toast;
    }

    /**
     * 反射字段
     *
     * @param object    要反射的对象
     * @param fieldName 要反射的字段名称
     * @return
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    private static Object getField(Object object, String fieldName) throws NoSuchFieldException, IllegalAccessException {
        Field field = object.getClass().getDeclaredField(fieldName);
        if (field != null) {
            field.setAccessible(true);
            return field.get(object);
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/wangwasdf/article/details/74392812
今日推荐