80,350
社区成员
发帖
与我相关
我的任务
分享
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
import android.app.Activity;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
public class FlowView {
private WindowManager wm=null;
private WindowManager.LayoutParams wmParams=null;
protected View view = null;
private float x,y,startX,startY;
private int TOOL_BAR_HIGH = 0;
public FlowView(int viewid,Activity act){
//获取WindowManager
wm=(WindowManager)act.getApplicationContext().getSystemService("window");
//设置LayoutParams(全局变量)相关参数
wmParams = new WindowManager.LayoutParams();
wmParams.type=LayoutParams.TYPE_PHONE; //设置window type
//wmParams.format=PixelFormat.RGBA_8888; //设置图片格式,效果为背景透明
//设置Window flag
wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
//以屏幕左上角为原点,设置x、y初始值
wmParams.x=0;
wmParams.y=0;
//设置悬浮窗口长宽数据
TOOL_BAR_HIGH = 200;
wmParams.width=LayoutParams.WRAP_CONTENT;
wmParams.height=LayoutParams.WRAP_CONTENT;
//调整悬浮窗口
wmParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
//显示myFloatView图像
view = LayoutInflater.from(act).inflate(viewid, null);
wm.addView(view, wmParams);
}
public void destroy(){
if(view!=null){
wm.removeView(view);
}
}
public boolean onTouchEvent(MotionEvent event) {
//触摸点相对于屏幕左上角坐标
x = event.getRawX();
y = event.getRawY() - TOOL_BAR_HIGH;
//Log.d(TAG, "------X: "+ x +"------Y:" + y);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
updatePosition();
break;
case MotionEvent.ACTION_UP:
updatePosition();
startX = startY = 0;
break;
}
return true;
}
//更新浮动窗口位置参数
private void updatePosition(){
if(view!=null){
// View的当前位置
wmParams.x = (int)( x - startX);
wmParams.y = (int) (y - startY);
wm.updateViewLayout(view, wmParams);
}
}
}