Android 悬浮窗口

来源:互联网 发布:mac sleep 时间 编辑:程序博客网 时间:2024/04/30 22:15
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;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic 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() {@Overridepublic void onClick(View v) {Log.i("onClick", "onClick");}});iv.setOnTouchListener(new OnTouchListener() {@Overridepublic 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;}@Overridepublic void onDestroy() {super.onDestroy();if (layout != null) {// 移除悬浮窗口wm.removeView(layout);}}}

0 0