收藏提示动画效果

需求:点击收藏,屏幕中间弹出收藏提示动画,3秒后消失,且悬浮在app之上(即不会随着viewpager滑动和activity跳转而消失)

解决方案:

布局:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/layout"
    android:background="#00ffffff">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tips_collection_success" />
</LinearLayout>
复制代码

方案一:使用dialog

复制代码
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.xuehu365.xuehu.R;

/**
 * Created by Administrator on 2016/12/27.
 */
public class CollectionAnimDialog {

    private Context context;
    private Dialog dialog;
    private View view;
    private LinearLayout layout;

    public CollectionAnimDialog(Context context) {
        this.context = context;
    }

    public CollectionAnimDialog builder() {
        view = LayoutInflater.from(context).inflate(R.layout.collection_anim_dialog, null);
        dialog = new Dialog(context, R.style.CollectionAnimDialogStyle);
        layout = (LinearLayout) view.findViewById(R.id.layout);
        layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        image = (ImageView) view.findViewById(R.id.image);
        dialog.setContentView(view);
        return this;
    }

    public void show() {
        dialog.show();
        collectionAnim();
    }

    /**
     * 收藏动画
     */
    private void collectionAnim() {
        AlphaAnimation alpha = new AlphaAnimation(1, 0);
        alpha.setDuration(3000);
        alpha.setFillAfter(true);
        alpha.setRepeatCount(0);
        layout.startAnimation(alpha);
        alpha.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                dialog.dismiss();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}
复制代码

dialog样式

复制代码
<!-- CollectionAnimDialog收藏动画对话框样式 -->
<style name="CollectionAnimDialogStyle" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>
复制代码

方案二:Toast(推荐使用)

//收藏动画
Toast toast = new Toast(App.getApplication());
View view = LayoutInflater.from(App.getApplication()).inflate(R.layout.collection_anim_dialog, null);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setView(view);
toast.show();

Toast简单明了,动画系统自带,完美

posted @   嘉禾世兴  阅读(1002)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示