Android仿360悬浮小球自定义view实现示例
程序员文章站
2023-11-15 20:37:34
android仿360悬浮小球自定义view实现示例
效果图如下:
实现当前这种类似的效果 和360小球 悬浮桌面差不错类似。这种效果是如何实现的呢。废...
android仿360悬浮小球自定义view实现示例
效果图如下:
实现当前这种类似的效果 和360小球 悬浮桌面差不错类似。这种效果是如何实现的呢。废话不多说 ,直接上代码。
1.新建工程,添加悬浮窗权限。
<uses-permission android:name="android.permission.system_alert_window" />
2.自定义一个floatmessagermainwindow
import android.content.context; import android.graphics.pixelformat; import android.graphics.point; import android.view.gravity; import android.view.layoutinflater; import android.view.view; import android.view.windowmanager; import android.widget.imageview; import android.widget.toast; import com.android.view.floatmessagepopledialog; /** * created by liupanpan on 2017/3/16. */ public class floatmessagermainwindow { private context context; private view view; private windowmanager.layoutparams mparams = null; private windowmanager windowmanager = null; private static floatmessagermainwindow floatmessagermainwindow; public floatmessagermainwindow(context context, view view) { this.context = context; this.view = view; showwindow(context); } public static floatmessagermainwindow getfloatmessagermainwindow(context context, view view) { if (floatmessagermainwindow == null) { synchronized (floatmessagermainwindow.class) { if (floatmessagermainwindow == null) { floatmessagermainwindow = new floatmessagermainwindow(context, view); } } } return floatmessagermainwindow; } private void showwindow(final context context) { // if (!iswindowdismiss) { // log.e(tag, "view is already added here"); // return; // } // iswindowdismiss = false; if (windowmanager == null) { windowmanager = (windowmanager) context.getapplicationcontext().getsystemservice(context.window_service); } point size = new point(); windowmanager.getdefaultdisplay().getsize(size); int screenwidth = size.x; int screenheight = size.y; mparams = new windowmanager.layoutparams(); mparams.packagename = context.getpackagename(); mparams.width = windowmanager.layoutparams.wrap_content; mparams.height = windowmanager.layoutparams.wrap_content; mparams.flags = windowmanager.layoutparams.flag_not_touch_modal | windowmanager.layoutparams.flag_not_focusable | windowmanager.layoutparams.flag_layout_inset_decor | windowmanager.layoutparams.flag_layout_in_screen; mparams.type = windowmanager.layoutparams.type_system_error; // mparams.softinputmode = windowmanager.layoutparams.soft_input_adjust_resize | // windowmanager.layoutparams.soft_input_state_hidden; mparams.format = pixelformat.rgba_8888; mparams.gravity = gravity.left | gravity.top; mparams.x = screenwidth - dp2px(context, 450); mparams.y = screenheight - dp2px(context, 550); imageview imageview = new imageview(context); imageview.setimageresource(r.mipmap.icon_tab_item_message_pressed); imageview.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(context, "image=========", toast.length_short).show(); view view = layoutinflater.from(context).inflate(r.layout.float_pople_room_layout, null); floatmessagepopledialog.getinstance(context, r.style.webviewtheme).setcontextview(view); } }); // floatview = new avcallfloatview(context); // floatview.setparams(mparams); // floatview.setisshowing(true); windowmanager.addview(imageview, mparams); } private int dp2px(context context, float dp) { final float scale = context.getresources().getdisplaymetrics().density; return (int) (dp * scale + 0.1f); } }
调用方法:
floatmessagermainwindow.getfloatmessagermainwindow(context, null);
实现到此 ,点击按钮就可以实现 悬浮窗。(此处可能会出现相应的崩溃,崩溃原因是悬浮窗的 悬浮权限开启问题。)
4.我以官方模拟器为例开启悬浮权限:
打开允许在其他应用上的管理权限
此时再次打开工程,点击按钮,就可以实现悬浮效果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 精准营销核心思维
下一篇: 站长之家站长工具改版了!
推荐阅读
-
Android仿360悬浮小球自定义view实现示例
-
Android自定义view仿QQ的Tab按钮动画效果(示例代码)
-
Android自定义View实现游戏摇杆键盘的方法示例
-
Android利用Paint自定义View实现进度条控件方法示例
-
android仿即刻点赞文字部分的自定义View的示例代码
-
Android仿360悬浮小球自定义view实现示例
-
android仿Adapter实现自定义PagerAdapter方法示例
-
Android自定义view实现拖动小球移动
-
android通过自定义toast实现悬浮通知效果的示例代码
-
Android编程基于自定义view实现公章效果示例【附源码下载】