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>