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实现示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)