首页 > 代码库 > Android悬浮窗口
Android悬浮窗口
FloatService:
package com.home.floatwindow;import android.app.Service;import android.content.Context;import android.content.Intent;import android.graphics.PixelFormat;import android.os.IBinder;import android.util.Log;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.WindowManager;import android.view.WindowManager.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import com.home.testfolatwindow.R;public class FloatService extends Service { private WindowManager wm; private WindowManager.LayoutParams wmlp; private LinearLayout layout; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); createFloatView(); } private void createFloatView() { wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); wmlp = new WindowManager.LayoutParams(); wmlp.type = LayoutParams.TYPE_PHONE; // 设置图片格式,效果为背景透明 wmlp.format = PixelFormat.RGBA_8888; // 设置浮动窗口不可聚焦 wmlp.flags = LayoutParams.FLAG_NOT_FOCUSABLE; wmlp.gravity = Gravity.LEFT | Gravity.TOP; wmlp.x = 0; wmlp.y = 0; wmlp.width = WindowManager.LayoutParams.WRAP_CONTENT; wmlp.height = WindowManager.LayoutParams.WRAP_CONTENT; layout = getLayout(); wm.addView(layout, wmlp); layout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); ImageView iv = (ImageView) layout.findViewById(1); iv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i("onClick", "onClick"); } }); iv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标 wmlp.x = (int) event.getRawX() - layout.getMeasuredWidth() / 2; // 减25为状态栏的高度 wmlp.y = (int) event.getRawY() - layout.getMeasuredHeight() / 2 - 25; wm.updateViewLayout(layout, wmlp); return false; } }); } private LinearLayout getLayout() { LinearLayout layout = new LinearLayout(this); ImageView iv = new ImageView(this); iv.setBackgroundResource((R.drawable.ic_launcher)); iv.setId(1); layout.addView(iv); return layout; } @Override public void onDestroy() { super.onDestroy(); if (layout != null) { // 移除悬浮窗口 wm.removeView(layout); } }}
权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Android悬浮窗口
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。