Android仿360悬浮小球自定义view实现示例

Android仿360悬浮小球自定义view实现示例,第1张

概述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仿360悬浮小球自定义view实现示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存