安卓的悬浮窗问题,很急~~~!!

liangweichao3 2012-12-05 05:12:35
急急急!!!
有两个很急的安卓悬浮窗开发的问题想问一下:
1.为什么打开这个悬浮窗的程序的时候,后面的东西动不了,比如后面的菜单,点不了,只能动这个悬浮窗,要把这个悬浮窗退掉了,后面的菜单才能点击。

2.拖拽的时候,如何在我按在这个悬浮窗上的时候才进行拖动,我发现我现在按住其它的地方,擦动的时候它才跟着动,我怀疑是我的X,Y设置得不对。

下面是代码片段:

// 相关的类成员变量定义

private WindowManager wm = null;
private WindowManager.LayoutParams wmParams = null;
private float mTouchStartX;
private float mTouchStartY;
private float x;
private float y;


// 这个是用WindowManager进行窗口的基本设置

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);



// 这个是touch拖拽事件处理

@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);
}



PS:以上的代码都位置一个activity中
安卓的版本是:2.2
测试的手机是: Motorola ME811 4寸大屏幕

很急的问题,望懂的大虾帮帮忙!
...全文
112 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧