首页 > 代码库 > 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悬浮窗口