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;@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);}}}


权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


更多相关文章

  1. android给View设置边框 填充颜色 弧度
  2. android通知栏提示
  3. Android应用程序设置Home Screen
  4. android density
  5. android之PopupWindow
  6. Android(Java):自定义控件
  7. Android(安卓)闹钟源码
  8. Android(安卓)自定义ViewPager 实现轮播图
  9. android density

随机推荐

  1. android 10.0拍照显示并上传服务器
  2. 2010.10.30———Android 03
  3. Android 开发最佳实践
  4. 聊聊Android切图
  5. Android 开发 — 开机自启动
  6. android半透明activity设置
  7. Android Password Field Example
  8. android 笔记 --- Android中Handler,Loop
  9. Android点击图标重新启动问题
  10. android Video播放