为Service添加一个在桌面上的可移动浮动小图标

    @SuppressLint("ClickableViewAccessibility")
    private void showViewOnTop() {
        WindowManager windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        if (imageViewIcon == null || viewParams == null) {
            viewParams = new WindowManager.LayoutParams();
            viewParams.type = WindowManager.LayoutParams.TYPE_PHONE;
            viewParams.width = 32;
            viewParams.height = 32;
            viewParams.gravity = Gravity.START | Gravity.TOP;
            //很重要:否则屏幕就会挡住屏幕,无法触摸其它东西了
            viewParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            viewParams.format = PixelFormat.RGBA_8888 | PixelFormat.TRANSLUCENT;
            imageViewIcon = new ImageView(this);
            imageViewIcon.setImageResource(R.drawable.icon_nt);
            imageViewIcon.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(tag, "移动图标被点击了,打开窗体");
                    Intent taskDoingIntent = new Intent(MainService.this, MainActivity.class);
                    taskDoingIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                    startActivity(taskDoingIntent);
                }
            });
            //处理移动图标事件
            imageViewIcon.setOnTouchListener(new View.OnTouchListener() {
                private float mStartX, mStartY;
                private boolean isClick = false;

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            isClick = true;
                            mStartX = event.getRawX();
                            mStartY = event.getRawY();
                            break;
                        case MotionEvent.ACTION_MOVE:
                            isClick = false;
                            viewParams.x += event.getRawX() - mStartX;
                            viewParams.y += event.getRawY() - mStartY;
                            windowManager.updateViewLayout(imageViewIcon, viewParams);
                            mStartX = event.getRawX();
                            mStartY = event.getRawY();
                            break;
                        case MotionEvent.ACTION_UP:
                            if (isClick) return v.performClick();
                            break;
                    }
                    return true;
                }
            });
        }
        windowManager.addView(imageViewIcon, viewParams);
    }

关闭图标

    private void removeImageView() {
        ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).removeView(imageViewIcon);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值