Android桌面悬浮窗效果怎么实现
答案:2 悬赏:60 手机版
解决时间 2021-04-04 07:12
- 提问者网友:欺烟
- 2021-04-03 14:21
Android桌面悬浮窗效果怎么实现
最佳答案
- 五星知识达人网友:杯酒困英雄
- 2021-04-03 15:51
可以模仿360手机卫士悬浮窗的那份代码的基础上继续开发。
打开手机卫士主界面,然后上拉,然后点击快捷设置,然后点击桌面悬浮窗,就可以将360手机卫士安卓版桌面浮窗调出来了,具体步骤如下:
1、安装最新的360手机卫士。
2、点开隐私保护,打开右上角的三个点。
3、点开卫士设置,点开悬浮窗。
4、开启内存清理悬浮窗, 选择显示样式,安仔样式或是加速球。
5、可以选择仅在桌面显示,若开启则悬浮窗只出现在桌面,若关闭则悬浮窗会跟随打开页面一直出现。
6、可以同时开启拖动清理内存,这样直接拖动悬浮窗图标,就可以轻松清理内存了。
打开手机卫士主界面,然后上拉,然后点击快捷设置,然后点击桌面悬浮窗,就可以将360手机卫士安卓版桌面浮窗调出来了,具体步骤如下:
1、安装最新的360手机卫士。
2、点开隐私保护,打开右上角的三个点。
3、点开卫士设置,点开悬浮窗。
4、开启内存清理悬浮窗, 选择显示样式,安仔样式或是加速球。
5、可以选择仅在桌面显示,若开启则悬浮窗只出现在桌面,若关闭则悬浮窗会跟随打开页面一直出现。
6、可以同时开启拖动清理内存,这样直接拖动悬浮窗图标,就可以轻松清理内存了。
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-04-03 16:44
可以根据项目需要改变其相应布局。
package com.zk.me;
import java.util.list;
import android.app.activity;
import android.content.componentname;
import android.content.context;
import android.content.intent;
import android.content.pm.packageinfo;
import android.content.pm.packagemanager;
import android.content.pm.packagemanager.namenotfoundexception;
import android.content.pm.resolveinfo;
import android.os.bundle;
import android.view.gravity;
import android.view.menu;
import android.view.view;
import android.view.view.onclicklistener;
import android.view.window;
import android.view.windowmanager;
import android.widget.imageview;
import android.widget.toast;
public class mainactivity extends activity implements onclicklistener {
private windowmanager windowmanager = null;
private windowmanager.layoutparams windowmanagerparams = null;
private myfloatview floatview = null;
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);// 取消标题栏
getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,
windowmanager.layoutparams.flag_fullscreen);// 全屏
setcontentview(r.layout.activity_main);
createview();
}
public void ondestroy() {
super.ondestroy();
// 在程序退出(activity销毁)时销毁悬浮窗口
}
private void createview() {
floatview = new myfloatview(getapplicationcontext());
floatview.setonclicklistener(this);
imageview view = new imageview(this);
view.setimageresource(r.drawable.ic_launcher);
floatview.addview(view); // 这里简单的用自带的icon来做演示
windowmanager = (windowmanager) getapplicationcontext()
.getsystemservice("window");
// 设置layoutparams(全局变量)相关参数
windowmanagerparams = ((floatapplication) getapplication())
.getwindowparams();
windowmanagerparams.type = 2003; // 设置window type
// windowmanagerparams.format = pixelformat.rgba_8888; // 设置图片格式,效果为背景透明
// 设置window flag
windowmanagerparams.flags = 40;
windowmanagerparams.format = 1;
// 调整悬浮窗口至左上角,便于调整坐标
windowmanagerparams.gravity = gravity.left | gravity.top;
// 以屏幕左上角为原点,设置x、y初始值
windowmanagerparams.x = 0;
windowmanagerparams.y = 0;
// 设置悬浮窗口长宽数据
windowmanagerparams.width = 40;
windowmanagerparams.height = 40;
// 显示myfloatview图像
windowmanager.addview(floatview, windowmanagerparams);
}
public void onclick(view v) {
toast.maketext(this, "clicked", toast.length_short).show();
opencld("com.jovian.android.pqgl", getapplicationcontext());
}
public static void opencld(string packagename, context context) {// 打开移动警务应用
packagemanager packagemanager = context.getpackagemanager();
packageinfo pi = null;
try {
pi = packagemanager.getpackageinfo(packagename, 0);
} catch (namenotfoundexception e) {
}
intent resolveintent = new intent(intent.action_main, null);
resolveintent.addcategory(intent.category_launcher);
resolveintent.setpackage(packagename);
list apps = packagemanager.queryintentactivities(
resolveintent, 0);
resolveinfo resolveinfo = apps.iterator().next();
if (resolveinfo != null) {
string classname = resolveinfo.activityinfo.name;
intent intent = new intent(intent.action_main);
intent.addcategory(intent.category_launcher);
intent.setflags(intent.flag_activity_new_task);
componentname cn = new componentname(packagename, classname);
intent.setcomponent(cn);
context.startactivity(intent);
}
}
@override
protected void onrestoreinstancestate(bundle savedinstancestate) {
// todo auto-generated method stub
super.onrestoreinstancestate(savedinstancestate);
}
@override
public boolean oncreateoptionsmenu(menu menu) {
getmenuinflater().inflate(r.menu.activity_main, menu);
return true;
}
}
package com.zk.me;
import android.content.context;
import android.graphics.rect;
import android.util.log;
import android.view.gravity;
import android.view.motionevent;
import android.view.view;
import android.view.view.onclicklistener;
import android.view.windowmanager;
import android.widget.linearlayout;
public class myfloatview extends linearlayout {
private float mtouchx;
private float mtouchy;
private float x;
private float y;
private float mstartx;
private float mstarty;
private onclicklistener mclicklistener;
private windowmanager windowmanager = (windowmanager) getcontext()
.getapplicationcontext().getsystemservice("window");
// 此windowmanagerparams变量为获取的全局变量,用以保存悬浮窗口的属性
private windowmanager.layoutparams windowmanagerparams = ((floatapplication) getcontext()
.getapplicationcontext()).getwindowparams();
public myfloatview(context context) {
super(context);
}
@override
public boolean ontouchevent(motionevent event) {
// 获取到状态栏的高度
rect frame = new rect();
getwindowvisibledisplayframe(frame);
int statusbarheight = frame.top;
system.out.println("statusbarheight:" + statusbarheight);
// 获取相对屏幕的坐标,即以屏幕左上角为原点
x = event.getrawx();
y = event.getrawy() - statusbarheight; // statusbarheight是系统状态栏的高度
log.i("tag", "currx" + x + "====curry" + y);
switch (event.getaction()) {
case motionevent.action_down: // 捕获手指触摸按下动作
// 获取相对view的坐标,即以此view左上角为原点
mtouchx = event.getx();
mtouchy = event.gety();
mstartx = x;
mstarty = y;
log.i("tag", "startx" + mtouchx + "====starty" + mtouchy);
break;
case motionevent.action_move: // 捕获手指触摸移动动作
updateviewposition();
break;
case motionevent.action_up: // 捕获手指触摸离开动作
updateviewposition();
mtouchx = mtouchy = 0;
if ((x - mstartx) < 5 && (y - mstarty) < 5) {
if (mclicklistener != null) {
mclicklistener.onclick(this);
}
}
break;
}
return true;
}
@override
public void setonclicklistener(onclicklistener l) {
this.mclicklistener = l;
}
private void updateviewposition() {
// 更新浮动窗口位置参数
windowmanagerparams.x = (int) (x - mtouchx);
windowmanagerparams.y = (int) (y - mtouchy);
windowmanager.updateviewlayout(this, windowmanagerparams); // 刷新显示
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯