成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讓你的應(yīng)用"飄"起來(lái)!Android懸浮窗+自動(dòng)吸邊效果實(shí)戰(zhàn)

移動(dòng)開(kāi)發(fā) Android
重要注意事項(xiàng)1. 版本適配:Android 8.0+要用TYPE_APPLICATION_OVERLAY類(lèi)型。2. 內(nèi)存管理:記得在onDestroy里移除視圖!3. 用戶(hù)體驗(yàn):拖動(dòng)時(shí)可以考慮增加半透明效果。4. 權(quán)限提示:優(yōu)雅地引導(dǎo)用戶(hù)開(kāi)啟權(quán)限

先搞張"通行證"(權(quán)限篇)

在AndroidManifest里掛個(gè)牌子

<!-- 告訴系統(tǒng):我要開(kāi)懸浮窗啦! -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

這就像在游樂(lè)園門(mén)口掛了個(gè)"VIP通道"的牌子~

向用戶(hù)申請(qǐng)"特別通行證"

// 檢查是不是Android 6.0以上的"高級(jí)游樂(lè)園"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // 看看通行證有沒(méi)有過(guò)期
    if (!Settings.canDrawOverlays(this)) {
        // 申請(qǐng)權(quán)限
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, 1001);
    } else {
        showFloatingWindow(); // 亮出我們的懸浮窗!
    }
}

圖片圖片

創(chuàng)建會(huì)"跑"的懸浮窗(核心實(shí)現(xiàn))

懸浮窗基礎(chǔ)配置

// 窗口管家(WindowManager)登場(chǎng)
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

// 給懸浮窗穿件"衣服"
ImageView floatView = new ImageView(this);
floatView.setImageResource(R.drawable.ic_float); 

// 懸浮窗的"身份證信息"
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT,
    Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? 
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : // Android 8.0+用這個(gè)
        WindowManager.LayoutParams.TYPE_PHONE,                // 老版本用這個(gè)
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 別搶焦點(diǎn),做個(gè)安靜的美窗
    PixelFormat.TRANSLUCENT // 半透明效果更高級(jí)
);

// 初始位置:屏幕左上角+向下偏移100像素
params.gravity = Gravity.START | Gravity.TOP;
params.x = 0;
params.y = 100;

// 把懸浮窗"放"到屏幕上
windowManager.addView(floatView, params);

圖片圖片

讓?xiě)腋〈?動(dòng)"起來(lái)

floatView.setOnTouchListener(new View.OnTouchListener() {
    private int startX, startY;
    private float touchX, touchY;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: // 手指按下
                startX = params.x;
                startY = params.y;
                touchX = event.getRawX(); // 記錄觸點(diǎn)X
                touchY = event.getRawY(); // 記錄觸點(diǎn)Y
                return true;

            case MotionEvent.ACTION_MOVE: // 手指滑動(dòng)
                // 計(jì)算新位置
                params.x = startX + (int)(event.getRawX() - touchX);
                params.y = startY + (int)(event.getRawY() - touchY);
                windowManager.updateViewLayout(floatView, params);
                return true;

            case MotionEvent.ACTION_UP: // 手指松開(kāi)
                autoAttachToEdge(); // 觸發(fā)吸邊效果
                return true;
        }
        return false;
    }
});

磁吸邊效果實(shí)現(xiàn)(魔法時(shí)刻)

private void autoAttachToEdge() {
    int screenWidth = getResources().getDisplayMetrics().widthPixels;
    int viewCenterX = params.x + floatView.getWidth()/2;

    // 判斷離哪邊近
    if(viewCenterX < screenWidth/2) {
        params.x = 0; // 吸到左邊緣
    } else {
        params.x = screenWidth - floatView.getWidth(); // 吸到右邊緣
    }

    // 添加彈性動(dòng)畫(huà)
    ValueAnimator animator = ValueAnimator.ofInt(params.x, targetX);
    animator.addUpdateListener(animation -> {
        params.x = (int) animation.getAnimatedValue();
        windowManager.updateViewLayout(floatView, params);
    });
    animator.setDuration(300).start();
}

圖片圖片

重要注意事項(xiàng)

1. 版本適配:Android 8.0+要用TYPE_APPLICATION_OVERLAY類(lèi)型

2. 內(nèi)存管理:記得在onDestroy里移除視圖!

3. 用戶(hù)體驗(yàn):拖動(dòng)時(shí)可以考慮增加半透明效果

4. 權(quán)限提示:優(yōu)雅地引導(dǎo)用戶(hù)開(kāi)啟權(quán)限

快來(lái)打造屬于你的"桌面小精靈"吧!代碼在手,創(chuàng)意我有,讓你的應(yīng)用瞬間擁有靈魂~ ??

源碼:https://github.com/Reathin/Sample-Android/tree/master/module_float

責(zé)任編輯:武曉燕 來(lái)源: 沐雨花飛碟
相關(guān)推薦

2022-07-28 14:33:32

webviewweb頁(yè)面

2011-05-24 15:29:05

程序CC++

2025-03-28 03:20:00

MySQL數(shù)據(jù)庫(kù)搜索

2016-03-04 10:50:02

ios圓角高效添加

2013-07-23 10:30:48

Android Des應(yīng)用創(chuàng)新

2017-01-22 17:25:55

Android放大鏡效果源碼分析

2013-07-05 10:26:40

Android

2012-07-01 03:23:31

JBuilder

2020-09-29 07:54:05

Express 飛起

2011-04-13 10:51:58

MATLAB

2024-11-22 06:00:00

自動(dòng)鎖定WinForm

2010-07-27 14:00:53

Flex ComboB

2011-05-04 11:26:47

優(yōu)化

2022-10-09 18:14:31

訂單系統(tǒng)分庫(kù)分表

2015-12-01 13:51:52

Webrtc

2013-06-25 11:21:35

Android開(kāi)發(fā)幻燈片效果Gallery

2010-09-10 14:33:32

SQL循環(huán)語(yǔ)句

2011-09-02 13:54:31

Ubuntu

2017-02-24 08:56:47

API云計(jì)算IaaS

2012-09-03 09:21:51

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美啪啪网站 | 性欧美精品一区二区三区在线播放 | 国内精品免费久久久久软件老师 | 久久er精品 | 国产高清在线 | 中文字幕精品一区 | 9久久精品 | 亚洲国产中文字幕 | 久久久亚洲一区 | 国产成人网 | 国户精品久久久久久久久久久不卡 | 日日草夜夜草 | 99亚洲国产精品 | 久久高清亚洲 | 日本一区二区三区精品视频 | 久久精品中文字幕 | 国产精品一区网站 | 日韩成人av在线播放 | 国产色婷婷久久99精品91 | 欧美激情视频一区二区三区在线播放 | 羞羞色影院 | 欧洲亚洲一区 | 999久久久久久久 | 国产午夜精品一区二区三区在线观看 | 一级做a爰片性色毛片视频停止 | 国产亚洲一区二区在线观看 | 亚洲一区精品视频 | 久久一区二区三区电影 | 天天玩天天操天天干 | 一级毛片在线视频 | 国产高清免费视频 | 久久久av | 日韩中文字幕在线观看视频 | 日本在线一区二区三区 | 精品免费视频 | 中文字幕在线看人 | 日韩欧美在 | 久久1区| 999免费观看视频 | 九九伦理片 | 精品一区二区三区免费视频 |