借助windowmanager自定义悬浮框

  作为android一个重要的服务,该接口可实现添加view到屏幕,也可删除屏幕中的view,并通过layoutparams来设置view的不同效果。

  例如,利用其制作悬浮框:

    WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    WindowManager.LayoutParams wmParams =new WindowManager.LayoutParams()
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;//对话框
wmParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;//输入法显示时平移窗口
wmParams.format = 1;//不透明
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
if (!IsFocusable)
   wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//不允许获取焦点
else
{
   wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
         | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
//当窗口可以获得焦点时,仍然将窗口范围之外的点设备事件(鼠标、触摸屏)发送给后面的窗口处理
}
 获取自定义布局的宽高: 

xxView.measure(w, h);
width = xxView.getMeasuredWidth();
height = xxView.getMeasuredHeight();
这里可以在此基础上进行对话框大小的调整。

定义触摸事件:

view.setOnTouchListener(new OnTouchListener()
   {
      float X = 0;
      float Y = 0;

      @Override
      public boolean onTouch(View v, MotionEvent event)
      {

         if (event.getAction() == MotionEvent.ACTION_OUTSIDE)
         {

            if (view.getParent() != null)
            {
               wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不允许获取焦点
               windowManager.updateViewLayout(view, wmParams);
            }
            return false;
         } else
         {
            wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                  | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
            windowManager.updateViewLayout(view, wmParams);
         }

         switch (event.getAction())
         {
         // 按下
         case MotionEvent.ACTION_DOWN:
            Y = event.getY();
            X = event.getX();
            break;
         // 移动
         case MotionEvent.ACTION_MOVE:
            wmParams.x = (int) (event.getRawX() - X);
            wmParams.y = (int) (event.getRawY() - Y);
            windowManager.updateViewLayout(view, wmParams);
            break;
         default:
            break;
         }
         return false;
      }
   });
}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值