80,351
社区成员
发帖
与我相关
我的任务
分享
private WindowManager wm = null;
private WindowManager.LayoutParams wmParams = null;
private float mTouchStartX;
private float mTouchStartY;
private float x;
private float y;
mSendButton = new Button(getApplicationContext());
mSendButton.setText("打印");
wm = (WindowManager)getApplicationContext().getSystemService("window");
wmParams = new WindowManager.LayoutParams();
/**
*以下都是WindowManager.LayoutParams的相关属性
* 具体用途请参考SDK文档
*/
wmParams.type=WindowManager.LayoutParams.TYPE_PHONE; //这里是关键,你也可以试试2003
//wmParams.type=WindowManager.LayoutParams.TYPE_INPUT_METHOD; //这里是关键,你也可以试试2003
wmParams.format=1;
/**
*这里的flags也很关键
*代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;
*40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)
*/
//wmParams.flags=40;
wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL|LayoutParams.FLAG_NOT_FOCUSABLE;
//wmParams.flags = LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING|LayoutParams.FLAG_ALT_FOCUSABLE_IM|LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
//wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL| LayoutParams.FLAG_ALT_FOCUSABLE_IM | LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
//wmParams.x = wm.getDefaultDisplay().getWidth();
//wmParams.y = wm.getDefaultDisplay().getHeight();
//wmParams.gravity=Gravity.LEFT|Gravity.TOP;
wmParams.width=60;
wmParams.height=45;
//mSendButton.setFocusable(true);
//mSendButton.setFocusableInTouchMode(true);
@Override
public boolean onTouchEvent(MotionEvent event)
{
//获取相对屏幕的坐标,即以屏幕左上角为原点
x = event.getRawX();
y = event.getRawY()-25; //25是系统状态栏的高度
//x = 0;
//y = 0; //25是系统状态栏的高度
Log.i("currP", "currX"+x+"====currY"+y);
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
//获取相对View的坐标,即以此View左上角为原点
mTouchStartX = event.getX();
mTouchStartY = event.getY();
/*if(event.getX() == mSendButton.getScrollX() && event.getY() ==mSendButton.getScrollY())
{
mTouchStartX = mSendButton.getScrollX();
mTouchStartY = mSendButton.getScrollY();
}*/
Log.i("startP", "startX"+mTouchStartX+"====startY"+mTouchStartY);
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(mSendButton, wmParams);
}