安卓悬浮窗的写法



public void createTestWindow(final View layout){
  int lastviewX, lastviewY;
  final int [] lastviewXY=new int[2];
  
  final WindowManager.LayoutParams wmParams;
  mWindowManager = (WindowManager) getApplication().getSystemService(
    getApplication().WINDOW_SERVICE);
  wmParams = new WindowManager.LayoutParams();
  wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
//  wmParams.format = PixelFormat.RGBA_8888;
  wmParams.flags =WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//  wmParams.gravity = Gravity.CENTER_HORIZONTAL;
  wmParams.gravity = Gravity.LEFT | Gravity.TOP;
  wmParams.x =0;
  wmParams.y =0;
  // 设置悬浮窗口长宽数据
  wmParams.width =  WindowManager.LayoutParams.WRAP_CONTENT;
  wmParams.height =  WindowManager.LayoutParams.WRAP_CONTENT;

  LayoutInflater inflater = LayoutInflater.from(getApplication());
  mWindowManager.addView(layout, wmParams);
  layout.measure(View.MeasureSpec.makeMeasureSpec(0,
    View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
    .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
  layout.setOnTouchListener(new OnTouchListener() {

   @Override
   public boolean onTouch(View v, MotionEvent event) {
    Log.i("event", event.getAction()+"");
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
     // getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标
     
     wmParams.x =(int) event.getRawX()-(lastX-lastviewXY[0]);
     wmParams.y =(int) event.getRawY()-(lastY-lastviewXY[1]);
     if(wmParams.x==-1){
      return true;
     }
     mWindowManager.updateViewLayout(layout, wmParams);
    }
    if(event.getAction() == MotionEvent.ACTION_DOWN){
     lastX = (int) event.getRawX();//
     lastY = (int) event.getRawY();
     layout.getLocationOnScreen(lastviewXY);
    }
    return true;
   }
  });public void createTestWindow(final View layout){
int lastviewX, lastviewY;
final int [] lastviewXY=new int[2];

final WindowManager.LayoutParams wmParams;
mWindowManager = (WindowManager) getApplication().getSystemService(
getApplication().WINDOW_SERVICE);
wmParams = new WindowManager.LayoutParams();
wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
// wmParams.format = PixelFormat.RGBA_8888;
wmParams.flags =WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// wmParams.gravity = Gravity.CENTER_HORIZONTAL;
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
wmParams.x =0;
wmParams.y =0;
// 设置悬浮窗口长宽数据
wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

LayoutInflater inflater = LayoutInflater.from(getApplication());
mWindowManager.addView(layout, wmParams);
layout.measure(View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
layout.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("event", event.getAction()+"");
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标

wmParams.x =(int) event.getRawX()-(lastX-lastviewXY[0]);
wmParams.y =(int) event.getRawY()-(lastY-lastviewXY[1]);
if(wmParams.x==-1){
return true;
}
mWindowManager.updateViewLayout(layout, wmParams);
}
if(event.getAction() == MotionEvent.ACTION_DOWN){
lastX = (int) event.getRawX();//
lastY = (int) event.getRawY();
layout.getLocationOnScreen(lastviewXY);
}
return true;
}
});
}
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值