WindowManger 事件接收 不能接收onTouch
来源:互联网 发布:淘宝网pc客户端下载 编辑:程序博客网 时间:2024/05/21 09:11
我们先来看代码:
// 取得系统窗体 mWindowManager = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); // 窗体的布局样式 mLayout = new WindowManager.LayoutParams(); // 设置窗体显示类型——TYPE_SYSTEM_ALERT(系统提示) mLayout.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // 设置窗体焦点及触摸: // FLAG_NOT_FOCUSABLE(不能获得按键输入焦点)// mLayout.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |// WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mLayout.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; //当前Window区域以外的点击事件传递给下层window,当前window区域以内的点击事件自己处理 // 设置显示的模式 mLayout.format = PixelFormat.RGBA_8888; // 设置对齐的方法 mLayout.gravity = Gravity.TOP | Gravity.CENTER; // 设置窗体宽度和高度 mLayout.width = WindowManager.LayoutParams.WRAP_CONTENT; mLayout.height = WindowManager.LayoutParams.WRAP_CONTENT; //将制定View解析后添加到窗口管理器里面 mWindowsView = View.inflate(this, R.layout.windows_layout, null); mVVWindows = (VideoView) mWindowsView.findViewById(R.id.videoView); playVideo(mVVWindows); mWindowManager.addView(mWindowsView, mLayout); mWindowsView.setFocusable(true); mWindowsView.setFocusableInTouchMode(true); mWindowsView.setOnTouchListener(new View.OnTouchListener() { float mTouchStartX; float mTouchStartY; @Override public boolean onTouch(View view, MotionEvent event) { x = event.getRawX(); y = event.getRawY() -25; //25是 系统状态栏的高度 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTouchStartX = event.getX(); mTouchStartY = event.getY(); break; case MotionEvent.ACTION_MOVE: //原始坐标减去移动坐标 mLayout.x = (int) (x - mTouchStartX); mLayout.y = (int) (y - mTouchStartY); mWindowManager.updateViewLayout(mWindowsView, mLayout); Log.i("main", "x值=" + x + "\ny值=" + y + "\nmTouchX" + mTouchStartX + "\nmTouchY=" + mTouchStartY); break; } return true; } });
这里:我们只需要注意WindowManger参数中的flags ,如果我们去掉它,完全不写flags参数,此时可以接收到Touch事件,如果设置了 ,这里有很多坑等着你。。
所以这里的flags不要随便写:
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL表示的是该window处产生的事件可以自行处理,区域以外的交由下层window处理。
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
这个,不仅表示不获取焦点,而且touch事件都不能传递给它,你都不获取焦点了,我干啥要交给你事件啊。WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
顾名思义,我不处理Touch事件。还有其他的flags , 自己去查文档吧, 实际中使用的还是很少的,其中的坑也不少。。。。呵呵
0 0
- WindowManger 事件接收 不能接收onTouch
- 接收事件
- Canvas不能接收 rollOver和roolOut事件的解决方案
- 关于cocos2d-x 触屏事件不能接收的问题
- foxmail不能接收邮件
- 接收
- 接收
- 接收
- 事件接收与忽略
- Linux 接收热插拔事件
- cocos2d接收触摸事件
- 事件接收与忽略
- pm_notifier 接收待机事件
- 4.接收事件推送
- 事件接收与忽略
- 发送与接收事件
- WebBrowser接收事件的途径
- qt之控件事件接收
- springmvc接收数组的方式
- MTK 修改ro.hardware 获取cpu 和固件版本号方法
- hdu4607双dfs求树的直径+公式
- Android的消息呼吸灯闪烁
- 基于jackson注释@JsonFormat 格式化时间少8小时
- WindowManger 事件接收 不能接收onTouch
- spring 自带的定时任务
- SVN、GIT常用命令详解
- 哈夫曼树的构造
- 使用wampserver搭建 WAMP 平台超简单实用教程
- HDU 1518 木棍凑方阵 DFS经典题 很有代表性的DFS题型 初学者的视角详细注释
- adb无法使用,提示error: unknown host service的解决办法
- Java爬虫
- Android5.1 手机Settings加入从不休眠