游戏SDK应用内悬浮窗的实现(一)

游戏SDK应用内悬浮窗的实现(一)
游戏SDK应用内悬浮窗的实现(二)
游戏SDK应用内悬浮窗的实现(三)
游戏SDK应用内悬浮窗的实现(四)

游戏SDK应用内悬浮窗的实现(一)

注意:这是app应用内的悬浮窗,并非是应用外的。应用内的悬浮窗不需要添加权限的。
考虑到大多数游戏都是只有一个Activity,在游戏的Activity上添加一个可移动的ImageView即可,所以考虑的方案应该选用应用内弹窗。

最近在开发游戏SDK的悬浮窗,顺便记录下开发悬浮窗的过程,也在git上面找过很多的悬浮窗的例子,都是非常有用的。但是开发过程中难免遇到很多坑,所以为了避开这些麻烦, 把遇到的坑记录下来,集思广益。

首先从简单悬浮窗代码入手,仅需两个代码文件

在这里插入图片描述

1、创建一个FloatIconView,继承于RelativeLayout
package com.colin.gamefloatview;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.RelativeLayout;

/**
 * Date:2022-10-18
 * Time:11:33
 * author:colin
 */
public class FloatIconView extends RelativeLayout {
    public FloatIconView(Activity activity){
        super(activity);
        init(activity);
    }
    public void init(Activity activity){

        View view = LayoutInflater.from(activity).inflate(R.layout.activity_float_item, this);
        DisplayMetrics dm = activity.getResources().getDisplayMetrics();
        int widthPixels = dm.widthPixels;
        int heightPixels = dm.heightPixels;

       WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);

        //屏宽
       int screenWidth = wm.getDefaultDisplay().getWidth();
        //屏高
       int screenHeight = wm.getDefaultDisplay().getHeight();

        WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
        wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION;
        wmParams.format = PixelFormat.RGBA_8888;//设置背景图片
        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;//
        wmParams.x = widthPixels; //设置位置像素
        wmParams.y = heightPixels;
        wmParams.width = 150; //设置图片大小
        wmParams.height = 150;
        wm.addView(view, wmParams);

    }
}

2、activity_float_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/floaticon_btn"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher" />
    

</RelativeLayout>
3、MainActivity的使用
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FloatIconView floatIconView = new FloatIconView(this);
        
    }
}
运行结果:

能看到右下角已经弹出了一个悬浮按钮了。
接下来就是实现悬浮窗的拖动,以及悬浮窗自动贴边的操作
游戏SDK应用内悬浮窗的实现(二)
在这里插入图片描述
附上最后的资源链接
https://download.csdn.net/download/gsrkuang/86812918
积分不够的话可以联系我拿285184329

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值