Android 飘屏 全局、自定义

Android飘屏(全局、自定义)

这里用到了队列,请参考队列的使用:Android 队列的简单使用_小何Android的博客-CSDN博客

效果图

FloatingDialog

package com.MicroChat.common.utils;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.TextView;

import com.MicroChat.common.R;
import com.MicroChat.common.activity.AbsActivity;
import com.MicroChat.common.event.VipMsgEvent;
import com.MicroChat.common.glide.ImgLoader;

/**
 * Created by Martin on 2022/11/29.
 */

public class FloatingDialogUitl {

    @SuppressLint("SetTextI18n")
    public void loadingDialog(final Context context, final VipMsgEvent vipMsgEvent, final SimpleCallback simpleCallback) {
        if (vipMsgEvent == null) {
            return;
        }
        final Dialog dialog = new Dialog(context, R.style.floating);
        dialog.setContentView(R.layout.dialog_floating);
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);

        Window window = dialog.getWindow();
        window.setWindowAnimations(R.style.leftToRightAnim);

        WindowManager.LayoutParams params = window.getAttributes();
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = 200;
        params.y = 125;
        params.gravity = Gravity.TOP;
        window.setAttributes(params);

        View mUserGroup = dialog.findViewById(R.id.jg_user);
        final ImageView mAvatar = dialog.findViewById(R.id.jg_avatar);
        TextView mName = dialog.findViewById(R.id.jg_name);
        TextView money = dialog.findViewById(R.id.money);
        TextView tips1 = dialog.findViewById(R.id.tips1);
        TextView tips2 = dialog.findViewById(R.id.tips2);

        ImgLoader.display(context, vipMsgEvent.getAvatar(), mAvatar);

        if (vipMsgEvent.getType().equals("charge")) {
            mName.setText(vipMsgEvent.getUserName());
            tips1.setText("充值了");
            money.setText(vipMsgEvent.getMoney());
            tips2.setText("元!");
        } else if (vipMsgEvent.getType().equals("gif")) {
            mName.setText(vipMsgEvent.getUserName());
            tips1.setText("送");
            money.setText(vipMsgEvent.getTouname());
            tips2.setText(vipMsgEvent.getGiftname());
        } else if (vipMsgEvent.getType().equals("svip")) {
            mName.setText(vipMsgEvent.getUserName());
            tips1.setText("开通了");
            money.setText(vipMsgEvent.getVip_name());
            tips2.setText("");
        }
        Interpolator interpolator = new AccelerateDecelerateInterpolator();

        ObjectAnimator mUserAnimator;

        mUserAnimator = ObjectAnimator.ofFloat(mUserGroup, "translationX", DpUtil.dp2px(10));
        mUserAnimator.setDuration(5000);
        mUserAnimator.setInterpolator(interpolator);
        mUserAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                if (!((AbsActivity) context).isFinishing() && dialog.isShowing()) {
                    dialog.dismiss();
                    simpleCallback.onConfirmClick(dialog);
                }
            }
        });
        mUserAnimator.start();

        mUserGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RouteUtil.forwardUserHome(vipMsgEvent.getUid());
            }
        });


        dialog.show();
    }

    public interface SimpleCallback {
        void onConfirmClick(Dialog dialog);
    }
}

R.style.floating

    <style name="floating" parent="AppTheme">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:backgroundDimAmount">0.5</item>
        <!--显示区域以外是否使用黑色半透明背景-->
        <item name="android:backgroundDimEnabled">false</item>
    </style>

dialog_floating.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/enter_room_group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/transparent">

    <LinearLayout
        android:id="@+id/jg_user"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@drawable/bg_floating"
        android:gravity="center_vertical"
        android:translationX="500dp">

        <com.makeramen.roundedimageview.RoundedImageView
            android:id="@+id/jg_avatar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:scaleType="centerCrop"
            app:riv_border_color="@color/yellow"
            app:riv_border_width="1dp"
            app:riv_oval="true" />

        <TextView
            android:id="@+id/jg_name"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginLeft="5dp"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="@color/yellow2"
            android:textSize="14dp" />

        <TextView
            android:id="@+id/tips1"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginLeft="3dp"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="@color/white"
            android:textSize="14dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/money"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginStart="5dp"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:paddingBottom="3dp"
            android:singleLine="true"
            android:textColor="@color/yellow2"
            android:textSize="20dp" />

        <TextView
            android:id="@+id/tips2"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginStart="5dp"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="@color/white"
            android:textSize="14sp" />

    </LinearLayout>

</LinearLayout>

R.style.leftToRightAnim

  <style name="leftToRightAnim" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/left_anim_enter</item>
        <item name="android:windowExitAnimation">@anim/left_anim_exit</item>
    </style>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值