安卓悬浮窗的写法

来源:互联网 发布:网络打印机服务器 编辑:程序博客网 时间:2024/05/29 09:48


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 0
原创粉丝点击