package com.apkstory.service;import com.apkstory.R;import com.apkstory.util.MyApplication;import android.app.Service;import android.content.Intent;import android.graphics.PixelFormat;import android.os.IBinder;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.view.View.OnTouchListener;/** * 悬浮窗的制作 * @author 锋翼 * @link www.apkstory.com */public class TopFloatService extends Service {        WindowManager wm = null;        WindowManager.LayoutParams wmParams = null;        View view;        private float mTouchStartX;        private float mTouchStartY;        private float x;        private float y;                @Override        public void onCreate() {                super.onCreate();                view = LayoutInflater.from(this).inflate(R.layout.floating, null);                createView();        }        private void createView() {                // 获取WindowManager                wm = (WindowManager) getApplicationContext().getSystemService("window");                // 设置LayoutParams(全局变量)相关参数                wmParams =  ((MyApplication) getApplication()).getMywmParams();                wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;// 该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面                wmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不接受任何按键事件                wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角                // 以屏幕左上角为原点,设置x、y初始值                wmParams.x = 0;                wmParams.y = 0;                // 设置悬浮窗口长宽数据                wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;                wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;                wmParams.format = PixelFormat.RGBA_8888;                wm.addView(view, wmParams);                view.setOnTouchListener(new OnTouchListener() {                        public boolean onTouch(View v, MotionEvent event) {                                // 获取相对屏幕的坐标,即以屏幕左上角为原点                                x = event.getRawX();                                // 25是系统状态栏的高度,也可以通过方法得到准确的值,自己微调就是了                                y = event.getRawY()-25 ;                                 switch (event.getAction()) {                                case MotionEvent.ACTION_DOWN:                                        // 获取相对View的坐标,即以此View左上角为原点                                        mTouchStartX = event.getX();                                        mTouchStartY = event.getY()+view.getHeight()/2;                                        break;                                case MotionEvent.ACTION_MOVE:                                        updateViewPosition();                                        break;                                case MotionEvent.ACTION_UP:                                        updateViewPosition();                                        mTouchStartX = mTouchStartY = 0;                                        break;                                }                                return true;                        }                });        }                private void updateViewPosition() {                // 更新浮动窗口位置参数                wmParams.x = (int) (x - mTouchStartX);                wmParams.y = (int) (y - mTouchStartY);                wm.updateViewLayout(view, wmParams);        }        @Override        public IBinder onBind(Intent intent) {                return null;        }}

更多相关文章

  1. android 9.0通知栏适配,可用通知栏,悬浮通知,震动,提示音,
  2. [Android]自定义图片左上角斜着的View
  3. Android(安卓)悬浮按钮的简单实现
  4. Android(安卓)获取View的位置参数:x,y和相对父容器的偏移量以及中
  5. 悬浮顶层控件不受ScrollView影响
  6. 安装Android(安卓)studio 时候显示:SDK tools directory is missi
  7. Android(安卓)— 制作悬浮窗口
  8. Android我还可以相信你多少系列文章四之悬浮窗
  9. Android常用控件之悬浮窗

随机推荐

  1. 开发工具(持续更新)
  2. 显示Android当前可用系统内存方法
  3. Android selector控制TextView和Button按
  4. Android编程心得---捕捉Home键事件的完美
  5. ANDROID笔记:shape的简单使用
  6. Android如何用checkBox实现单选
  7. Android 使用 ToneGenerator 编写按键发
  8. 【Android】setHapticFeedbackEnabled 设
  9. get screen size of android device in o
  10. Android上获取打开apk默认关联的图标.