Android手机悬浮窗口小案例
本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下
–主页面——–
//布局中就一个Button publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn).setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewview){ //目的就是启动Service来打开悬浮窗体 startService(newIntent(MainActivity.this,FloatService.class)); finish(); } }); } }
—Service开启悬浮窗体——-
/** *description:通过Service来开启FloatView *作者:ldm *时间:20162016/8/1714:03 *邮箱:1786911211@qq.com */ publicclassFloatServiceextendsService{ @Override publicvoidonCreate(){ super.onCreate(); CustomViewManager.getInstance(this).showFloatViewOnWindow(); } @Override publicIBinderonBind(Intentintent){ returnnull; } }
—悬浮窗体管理工具类——-
/** *description: *作者:ldm *时间:20162016/8/1711:57 *邮箱:1786911211@qq.com */ publicclassCustomViewManager{ //上下文 privateContextmContext; //本类实例 privatestaticCustomViewManagerinstance; //自定义的FloatView privateFloatViewmFloatView; //窗口管理类 privateWindowManagermWindowManager; privateCustomViewManager(Contextcontext){ this.mContext=context; mFloatView=newFloatView(mContext); mWindowManager=(WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); } /** *@param *@description通过单例模式获取实例对象 *@authorldm *@time2016/8/1711:59 */ publicstaticCustomViewManagergetInstance(ContextmContext){ if(null==instance){ synchronized(CustomViewManager.class){ if(null==instance){ instance=newCustomViewManager(mContext); } } } returninstance; } /** *@param *@description在手机屏幕上显示自定义的FloatView *@authorldm *@time2016/8/1713:47 */ publicvoidshowFloatViewOnWindow(){ WindowManager.LayoutParamsparmas=newWindowManager.LayoutParams(); parmas.width=mFloatView.getFloatWidth(); parmas.height=mFloatView.getFloatHeight(); //窗口图案放置位置 parmas.gravity=Gravity.LEFT|Gravity.CENTER; //如果忽略gravity属性,那么它表示窗口的绝对X位置。 parmas.x=0; //如果忽略gravity属性,那么它表示窗口的绝对Y位置。 parmas.y=0; ////电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。 parmas.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; //FLAG_NOT_FOCUSABLE让window不能获得焦点,这样用户快就不能向该window发送按键事件及按钮事件 //FLAG_NOT_TOUCH_MODAL即使在该window在可获得焦点情况下,仍然把该window之外的任何event发送到该window之后的其他window. parmas.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; //期望的位图格式。默认为不透明。参考android.graphics.PixelFormat。 parmas.format=PixelFormat.RGBA_8888; mWindowManager.addView(mFloatView,parmas); } }
—自定义的FloatView——-
/** *description: *作者:ldm *时间:20162016/8/1711:17 *邮箱:1786911211@qq.com */ publicclassFloatViewextendsView{ //悬浮球宽度 privateintfloatWidth=150; //悬浮球高度 privateintfloatHeight=150; //悬浮球画笔 privatePaintmPaint; //绘制文字画笔 privatePaintmTextPaint; privateStringtext="50%"; publicFloatView(Contextcontext){ super(context); initPaint(); } publicintgetFloatWidth(){ returnfloatWidth; } publicintgetFloatHeight(){ returnfloatHeight; } publicFloatView(Contextcontext,AttributeSetattrs){ super(context,attrs); initPaint(); } publicFloatView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); initPaint(); } /** *@param *@description初始化画笔 *@authorldm *@time2016/8/1711:37 */ privatevoidinitPaint(){ //设置悬浮球画笔 mPaint=newPaint(); mPaint.setColor(Color.GREEN); mPaint.setAntiAlias(true); mPaint.setDither(true); //设置文字画笔 mTextPaint=newPaint(); mTextPaint.setTextSize(25); mPaint.setAntiAlias(true); mTextPaint.setColor(Color.WHITE); mTextPaint.setFakeBoldText(true); } @Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){ //设置大小 setMeasuredDimension(floatWidth,floatHeight); } /** *@param *@description绘制图案 *@authorldm *@time2016/8/1711:44 */ @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); //绘制悬浮球 canvas.drawCircle(floatWidth/2,floatHeight/2,floatWidth/2,mPaint); //绘制文字 Paint.FontMetricsmetrics=mTextPaint.getFontMetrics(); //文字大小计算可以参考:http://mikewang.blog.51cto.com/3826268/871765/ floattextWidth=mTextPaint.measureText(text); floatx=floatWidth/2-textWidth/2; floatdy=-(metrics.descent+metrics.ascent)/2; floaty=floatHeight/2+dy; canvas.drawText(text,x,y,mTextPaint); } }
最后,在AndroidManifest.xml中不要忘记添加权限:
<!--添加权限--> <uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>
当然也要记得添加Service组件
<serviceandroid:name=".service.FloatService"/>
有的手机运行后,发现没有出现我们想要的悬浮窗体,可以进入手机设置中心,点击应用设置,在指定的应用权限设置中打开悬浮窗体相应的设置开关即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。