android可移动悬浮框

private OpenGLRender render = new OpenGLRender();
private float mTouchStartX;
private float mTouchStartY;
private float x;
private float y;
private WindowManager wm = null;
private WindowManager.LayoutParams wmParams = null;
private GLSurfaceView gl = null;

@Override
public void onCreate() {

wm = (WindowManager) getApplicationContext()
.getSystemService("window");
wmParams = new WindowManager.LayoutParams();


gl = new GLSurfaceView(this);
gl.setRenderer(render);



// 设置悬浮窗口长宽数据
wmParams.type = 2003; // type是关键,这里的2002表示系统级窗口,你也可以试试2003。
wmParams.format = PixelFormat.RGBA_8888;
wmParams.width = 40;
wmParams.height = 40;

wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角

wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
wm.addView(gl, wmParams);
gl.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//获取相对屏幕的坐标,即以屏幕左上角为原点
x = event.getRawX();
y = event.getRawY()-25; //25是系统状态栏的高度
Log.i("currP", "currX"+x+"====currY"+y);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//获取相对View的坐标,即以此View左上角为原点
mTouchStartX = event.getX();
mTouchStartY = event.getY();

Log.i("startP", "startX"+mTouchStartX+"====startY"+mTouchStartY);

break;
case MotionEvent.ACTION_MOVE:
updateViewPosition();
break;

case MotionEvent.ACTION_UP:
updateViewPosition();
mTouchStartX=mTouchStartY=0;
Toast.makeText(getApplicationContext(), "点击我了",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
gl.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "点击我了!!!",Toast.LENGTH_SHORT).show();
}
});
gl.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
Toast.makeText(getApplicationContext(), "点击我了!",Toast.LENGTH_SHORT).show();
return false;
}
});
// 启动动画
// Intent intent = new Intent(GameRunService.this,
// OpenGLActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intent);
}
private void updateViewPosition(){
//更新浮动窗口位置参数
wmParams.x=(int)( x-mTouchStartX);
wmParams.y=(int) (y-mTouchStartY);
wm.updateViewLayout(gl, wmParams);

}

posted on 2013-03-18 11:49  南京-张辉辉  阅读(234)  评论(0编辑  收藏  举报

导航