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;
    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些Android Java Toast自定义动画的代码,以下是示例代码: 1. 在res目录下新建anim文件夹(如果没有的话),并在该文件夹下新建一个xml文件,例如:toast_slide_in.xml,其内容如下: ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="500" android:fromXDelta="100%" android:toXDelta="0%" /> </set> ``` 2. 然后在res/drawable目录下创建背景文件,例如:toast_custom_bg.xml,其内容如下: ``` <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="50dp" /> <solid android:color="#FF4081" /> <padding android:bottom="10dp" android:left="12dp" android:right="12dp" android:top="10dp" /> </shape> ``` 3. 然后在Java代码中创建一个自定义的Toast,代码如下: ``` public class CustomToast { public static void show(Context context, String message) { LayoutInflater inflater = LayoutInflater.from(context); View layout = inflater.inflate(R.layout.toast_layout, null, false); TextView text = layout.findViewById(R.id.toast_text); ImageView icon = layout.findViewById(R.id.toast_icon); //设置文本和图标 text.setText(message); icon.setImageResource(R.drawable.ic_launcher); Toast toast = new Toast(context); toast.setGravity(Gravity.BOTTOM, 0, 100); toast.setView(layout); toast.setDuration(Toast.LENGTH_LONG); //设置动画 Animation slideIn = AnimationUtils.loadAnimation(context, R.anim.toast_slide_in); toast.getView().startAnimation(slideIn); toast.show(); } } ``` 4. 最后,调用CustomToast.show()方法即可展示自定义的Toast,如下所示: ``` CustomToast.show(this, "这是一条自定义的Toast"); ``` 以上是示例代码,您可以根据需要修改和调整。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值