欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Android中實(shí)現(xiàn)浮窗并添加吸邊效果的代碼示例

 更新時(shí)間:2025年02月21日 08:34:00   作者:最愛豆沙包  
在 Android 中實(shí)現(xiàn)浮窗(懸浮窗)并添加吸邊效果,可以使用 WindowManager 來(lái)管理浮窗視圖,并通過(guò)觸摸事件來(lái)實(shí)現(xiàn)吸邊效果,以下是一個(gè)示例,展示如何創(chuàng)建一個(gè)浮窗并實(shí)現(xiàn)吸邊效果,需要的朋友可以參考下

1. 添加權(quán)限

首先,確保您的應(yīng)用具有顯示懸浮窗的權(quán)限。在 AndroidManifest.xml 文件中添加以下權(quán)限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

2. 請(qǐng)求懸浮窗權(quán)限

在 Android 6.0(API 級(jí)別 23)及更高版本中,您需要在運(yùn)行時(shí)請(qǐng)求懸浮窗權(quán)限:

import android.content.Intent;

import android.net.Uri;

import android.os.Build;

import android.os.Bundle;

import android.provider.Settings;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_OVERLAY_PERMISSION = 1001;

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (!Settings.canDrawOverlays(this)) {

                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,

                        Uri.parse("package:" + getPackageName()));

                startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);

            } else {

                // 已獲得權(quán)限,顯示浮窗

                showFloatingWindow();

            }

        } else {

            // 低于 Android 6.0,直接顯示浮窗

            showFloatingWindow();

        }

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_OVERLAY_PERMISSION) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

                if (Settings.canDrawOverlays(this)) {

                    // 已獲得權(quán)限,顯示浮窗

                    showFloatingWindow();

                }

            }

        }

    }

    private void showFloatingWindow() {

        // 顯示浮窗的代碼

    }

}

3. 創(chuàng)建浮窗并實(shí)現(xiàn)吸邊效果

以下是一個(gè)完整的示例,展示如何創(chuàng)建一個(gè)浮窗并實(shí)現(xiàn)吸邊效果:

import android.content.Context;

import android.graphics.PixelFormat;

import android.os.Build;

import android.os.Bundle;

import android.view.Gravity;

import android.view.MotionEvent;

import android.view.View;

import android.view.WindowManager;

import android.widget.ImageView;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private WindowManager windowManager;

    private WindowManager.LayoutParams layoutParams;

    private ImageView floatingView;

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (!Settings.canDrawOverlays(this)) {

                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,

                        Uri.parse("package:" + getPackageName()));

                startActivityForResult(intent, 1001);

            } else {

                showFloatingWindow();

            }

        } else {

            showFloatingWindow();

        }

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1001) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

                if (Settings.canDrawOverlays(this)) {

                    showFloatingWindow();

                }

            }

        }

    }

    private void showFloatingWindow() {

        windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

        floatingView = new ImageView(this);

        floatingView.setImageResource(R.drawable.ic_launcher_foreground); // 替換為您的圖標(biāo)

        layoutParams = new WindowManager.LayoutParams(

                WindowManager.LayoutParams.WRAP_CONTENT,

                WindowManager.LayoutParams.WRAP_CONTENT,

                Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?

                        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :

                        WindowManager.LayoutParams.TYPE_PHONE,

                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,

                PixelFormat.TRANSLUCENT

        );

        layoutParams.gravity = Gravity.TOP | Gravity.LEFT;

        layoutParams.x = 0;

        layoutParams.y = 100;

        windowManager.addView(floatingView, layoutParams);

        floatingView.setOnTouchListener(new View.OnTouchListener() {

            private int initialX;

            private int initialY;

            private float initialTouchX;

            private float initialTouchY;

            @Override

            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {

                    case MotionEvent.ACTION_DOWN:

                        initialX = layoutParams.x;

                        initialY = layoutParams.y;

                        initialTouchX = event.getRawX();

                        initialTouchY = event.getRawY();

                        return true;

                    case MotionEvent.ACTION_MOVE:

                        layoutParams.x = initialX + (int) (event.getRawX() - initialTouchX);

                        layoutParams.y = initialY + (int) (event.getRawY() - initialTouchY);

                        windowManager.updateViewLayout(floatingView, layoutParams);

                        return true;

                    case MotionEvent.ACTION_UP:

                        int screenWidth = getResources().getDisplayMetrics().widthPixels;

                        if (layoutParams.x < screenWidth / 2) {

                            layoutParams.x = 0;

                        } else {

                            layoutParams.x = screenWidth;

                        }

                        windowManager.updateViewLayout(floatingView, layoutParams);

                        return true;

                }

                return false;

            }

        });

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        if (floatingView != null) {

            windowManager.removeView(floatingView);

        }

    }

}

解釋

  • 請(qǐng)求懸浮窗權(quán)限:在 onCreate 方法中檢查并請(qǐng)求懸浮窗權(quán)限。
  • 創(chuàng)建浮窗:使用 WindowManager 創(chuàng)建浮窗,并設(shè)置 WindowManager.LayoutParams
  • 實(shí)現(xiàn)吸邊效果:通過(guò) setOnTouchListener 方法監(jiān)聽浮窗的觸摸事件,在 ACTION_UP 事件中實(shí)現(xiàn)吸邊效果。

注意事項(xiàng)

  • 權(quán)限管理:確保在 Android 6.0 及更高版本中正確請(qǐng)求懸浮窗權(quán)限。
  • 懸浮窗類型:在 Android 8.0 及更高版本中,使用 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 類型。
  • 資源管理:在 onDestroy 方法中移除浮窗視圖,避免內(nèi)存泄漏。

到此這篇關(guān)于在Android中實(shí)現(xiàn)浮窗并添加吸邊效果的文章就介紹到這了,更多相關(guān)Android實(shí)現(xiàn)浮窗并添加吸邊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論