android 13 WMS/AMS系统开发-系统窗口添加app层demo源码分析

聚商汇WMS:开源仓库管理系统 聚商汇WMS–开源仓库管理系统 项目介绍: 完全开源仓储管理软件,遵循Apache License 2.0协议,前后端分离,且完全开源,API使用restful协议,方便二次开发,前端代码使用quasar进行构建,后端使用Python Django3.1,利用API,可以支持多仓,波次发货,合并拣货,Milk-Run等业务模型。 软件著作权编号:2018SR517685 GitHub地址:GitHub Demo地址:DEMO 技术交流QQ群:463562933 项目初衷: 我在供应 阅读详情
AI摘要

该文介绍了一个Android应用创建和管理SystemWindow的简单示例,包括如何创建悬浮窗体布局、监听触摸事件以实现窗口移动,以及关闭悬浮窗的方法。代码中展示了设置窗体参数、添加和移除视图的操作。

hi,本节课我们来讲解一个system window最简单的demo
更多内容qqun:422901085 https://ke.qq.com/course/5992266#term_id=106217431
课程源码:

package com.example.mysystemdialog;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;

public class MainActivity extends Activity {
    private WindowManager mWindowManager;
    private WindowManager.LayoutParams mLayoutParams;
    private DesktopLayout mWindowViewLayout;
    Button mClosetBtn = null;
    // 声明屏幕的宽高
    float x, y;
    int top;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        createWindowManager();
        createDesktopLayout();
        Button btn = (Button) findViewById(R.id.button);
        btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                showDesk();
            }
        });
    }
    /**
     * 创建悬浮窗体Layout
     */
    private void createDesktopLayout() {
        mWindowViewLayout = new DesktopLayout(this);
        mClosetBtn = mWindowViewLayout.findViewById(R.id.button2);
        mClosetBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                closeDesk();
            }
        });
        mWindowViewLayout.setOnTouchListener(onTouchListener);
    }
    OnTouchListener onTouchListener = new OnTouchListener() {
        float mTouchStartX;
        float mTouchStartY;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // 获取相对屏幕的坐标,即以屏幕左上角为原点
            x = event.getRawX();
            y = event.getRawY() - top; // 25是系统状态栏的高度
            Log.i("testx", "startX" + mTouchStartX + "====startY"
                    + mTouchStartY);
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    // 获取相对View的坐标,即以此View左上角为原点
                    mTouchStartX = event.getX();
                    mTouchStartY = event.getY();
                    Log.i("testx", "startX" + mTouchStartX + "====startY"
                            + mTouchStartY);
                    break;
                case MotionEvent.ACTION_MOVE:
                    // 更新浮动窗口位置参数
                    mLayoutParams.x = (int) (x - mTouchStartX);
                    mLayoutParams.y = (int) (y - mTouchStartY);
                    mWindowManager.updateViewLayout(v, mLayoutParams);
                    break;
                case MotionEvent.ACTION_UP:

                    // 更新浮动窗口位置参数
                    mLayoutParams.x = (int) (x - mTouchStartX);
                    mLayoutParams.y = (int) (y - mTouchStartY);
                    mWindowManager.updateViewLayout(v, mLayoutParams);

                    // 可以在此记录最后一次的位置

                    mTouchStartX = mTouchStartY = 0;
                    break;
            }
            return true;
        }
    };
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        Rect rect = new Rect();
        // /取得整个视图部分,注意,如果你要设置标题样式,这个必须出现在标题样式之后,否则会出错
        getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
        top = rect.top;//状态栏的高度,所以rect.height,rect.width分别是系统的高度的宽度

        Log.i("top",""+top);
    }

    /**
     * 显示DesktopLayout
     */
    private void showDesk() {
        mWindowManager.addView(mWindowViewLayout, mLayoutParams);
        finish();
    }

    /**
     * 关闭DesktopLayout
     */
    private void closeDesk() {
        mWindowManager.removeView(mWindowViewLayout);
        finish();
    }

    /**
     * 设置WindowManager
     */
    private void createWindowManager() {
        // 取得系统窗体
        mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);

        // 窗体的布局样式
        mLayoutParams = new WindowManager.LayoutParams();

        // 设置窗体显示类型——TYPE_APPLICATION_OVERLAY
        mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;

        // 设置显示的模式
       mLayoutParams.format = PixelFormat.RGBA_8888;

        // 设置对齐的方法
        mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;

        // 设置窗体宽度和高度
        mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
        mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

    }

}

课程流程图:
在这里插入图片描述

Android13 adb input 调试命令使用和源码解析 本章重点Android13 adb input 调试命令的使用和源码分析 通过命令来模拟用户在设备上的各种操作,从而进行测试、调试或其他目的。通过阅读源码来深入了解Android 13系统的输入事件管理机制。 阅读详情

相关推荐

HFSS初学笔记(二)——75Ω带状线设计

本文利用HFSS软件设计并优化了一条75Ω的带状线结构,通过调整几何参数和介质材料,实现了精确的阻抗控制。仿真结果显示,该带状线在高频信号传输中的表现优越,具有良好的S参数、低插入损耗和极小的信号反射损耗。

2401_87464239的博客 4545

Android13源码下载和编译过程详解

作为Android开发者人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解。

u010345983的博客 8289

140款Android开源优秀项目源码

140款Android开源优秀项目源码

zzjjtt3721的专栏 3391

保姆级教程:用YOLOv5s训练PCB缺陷检测模型(附北大公开数据集)

本文提供了一份基于YOLOv5s的PCB缺陷检测模型从零开始的完整实战教程。详细解析了如何使用北大公开数据集,涵盖环境搭建、数据处理、模型训练、性能评估及优化部署全流程,并针对工业场景中常见的类别不均衡问题给出了具体解决方案,旨在帮助开发者快速构建高精度的自动化质检系统。

weixin_28285943的博客 308

Android开发实战:5分钟搞定全屏沉浸式状态栏(附完整代码示例)

本文提供了Android开发中实现全屏沉浸式状态栏的完整实战指南。通过对比主题配置、动态代码设置和Window标志位三种方法,详细讲解了如何隐藏状态栏并处理布局适配。文章还涵盖了刘海屏、手势导航等高级适配场景,并附有可直接使用的工具类代码,帮助开发者快速提升应用视觉体验。

weixin_29197699的博客 359

盘点43个Android项目源码安卓爱好者不容错过

盘点43个Android项目源码安卓爱好者不容错过

adendean的博客 1421

DenseNet训练实践

在Cifar10上训练DenseNet,复现DenseNet论文的结果是后面两篇分析工作的基础,因此本系列的第一篇,将首先讨论深度学习的训练过程中的几个方面: 1. 数据集 1.1 Cifar10数据集 Cifar10数据集有6万张32X32的图片,是一个小型的数据集,但数据的复杂度足够,下图来自DenseNet论文,可以看出,不用数据增强的话,ResNet的正确率也很难超过90%,因而足以用来验...

一蓑烟雨任平生 1万+

android 弹窗demo,Android编程实现仿易信精美弹出框效果【附demo源码下载】

本文实例讲述了Android编程实现仿易信精美弹出框效果。分享给大家供大家参考,具体如下:截图:动画效果介绍:1.点击ActionBar上“+”按钮,菜单从上方弹出(带反弹效果);2.再次点击“+”、点击空白区域或者点击返回键,菜单向上方收起;3.点击弹出框上的按钮时,该按钮放大,其它按钮缩小,菜单整体渐变退出。主体代码:1.Activity./*** 仿易信动画弹出框*/public class...

weixin_28903391的博客 330

2023年5月青少年软件编程Python等级考试四级真题(含答案和解析)

电子学会,2023年5月,青少年软件编程,Python等级考试,四级真题(含答案和解析)

m0_37554648的博客 904

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

Android 知识体系

Android归档前言 前言 感谢: Gityuan:Android系统架构开篇 刘望舒的博客:知识体系

许浑的博客 8199

会员管理小程序实战开发04-用户登录及注册

上一节我们介绍了用户信息数据源的创建及网格布局的使用,本节的话我们讲解用户的登录及注册功能任何开发。 在我们前述章节里介绍的,不论是管理员表还是用户表,都涉及到一个问题就是openid,那这个openid如何获取呢?如果我直接把代码贴给你,就缺失了一个思考的过程。既然这个是微信提出的概念,那么必然就会有官方文档作为对应。程序开发的基本功就是要会看官方文档,很多初学的开发同学可能会对官方文档颇有诟病,觉得不够基础。怎么说呢,当你进入到开发岗之后,自学能力是必要的,还是要试着可以看懂官方文档才好。 登录接口解读

低代码布道师的博客 1567

flutter教程app,androidstudio开发视频教程

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

2401_84415534的博客 782

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android字节跳动一面,被面试官吊打!幸得美团内推,三面拿到offer

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!资料⬅专栏获取总结,有条理地进行阐述:遇到问题。

2401_85729780的博客 730

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

分享45个android实例源码,很好很强大.收藏吧!!!

andriod闹钟源代码http://www.apkbus.com/android-20974-1-1.htmlandroid源码分享之指南针程序http://www.apkbus.com/android-20973-1-1.html重力感应的测试程序andriod源代码http://www.apkbus.com/android-20972-1-1.htmlandroid源码分享之时光日志个人日程...

weixin_30539835的博客 3627

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

仓库管理系统demo搭建指南

本文将介绍,如何搭建云进销存-仓库管理。

bby2017的博客 2052

android 13 WMS/AMS系统开发-窗口层级相关DisplayArea,WindowContainer

官方注释: 给可以直接持有窗口的自己或它的孩子定义了一些公共的方法和属性,像RootWindowContainer、DisplayContent、DisplayArea、DisplayArea.Tokens、TaskDisplayArea、Task、ActivityRecord、WindowToken、WindowState都是直接或间接的继承该类。 这里面主要的重要要成员变量就是mParent和mChildren,一个代表父节点一个代表子节点,而且子节点的list顺序代表就是z轴的层级显示顺序,list尾

learnframework的博客 8807

【Android】Android 13系统源码修改与调试

本文介绍如何使用ASFP导入Android系统源码,如何使用ASFP断点调试Activity,如何修改Launcher App实现去掉谷歌搜索框,如何修改Setings App实现显示自定义设备名称

devnn的专栏 2530

AndroidDemo 开源项目教程

AndroidDemo 开源项目教程 1. 项目的目录结构及介绍 AndroidDemo 项目的目录结构如下: AndroidDemo/ ├── app/ │ ├── build/ │ ├── libs/ │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ ...

gitblog_00314的博客 757

Android13 系统源码适配安装可卸载的三方apk应用

本文主要介绍 手机的三方应用比如游戏,微博等应用,在源码中如何默认配置到手机中的。Android手机中的系统应用是无法手动卸载的,但是这些三方应用安装后是可以手动卸载的。源码编译中配置系统应用是比较简单的,只要在apk文件并且再Android.mk或者Android.bp中进行配置即可。但是如果要默认配置三方应用确实有点麻烦,网上很多文章讲得都比乱,大部分只是贴了相关代码,基本没有介绍完整流程和分享解决配置过程还有一些编译报错。

wenzhi的博客 3694

Android系统服务------WMS和AMS

本文转载自,博主写的很棒: http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b67848c5425938448e435061e5a24febd22754157d5c67a670bf94d48afad762438507ce1db95d31ccabbe36d70c9&p=8f3fd716d9c15afd

tianru720的专栏 888

Android13 系统源码核心目录解析

Android系统源码核心目录解析 本文梳理了Android13系统源码的核心目录结构,重点围绕框架层和应用层展开分析。主要内容包括: 框架层核心(frameworks/) - 包含Android上层框架API和系统服务实现,重点解析了: frameworks/base/:基础API和组件(Activity/Service/Binder) services/:核心系统服务(AMS/WMS/PMS) native/:底层原生实现(Binder/多媒体) 系统应用(packages/) - 预装系统应用和内容提

wenzhi的博客 2283

Android13 Media 扫盘源码分析(一)

Android13 外部磁盘,媒体库更新逻辑简述

qq_41350835的博客 1363
上一篇: android 13 WMS/AMS系统开发-窗口层级相关Task/ActivityRecord/WindowState/WindowToken放置图层创建 第三节
下一篇: android 13 WMS/AMS系统开发-WindowManagerService相关添加Window操作
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值