可移动布局(适用于WindowManager)
来源:互联网 发布:sql decode函数 编辑:程序博客网 时间:2024/05/18 03:58
public class MoveClickView extends RelativeLayout{ private float mTouchX; private float mTouchY; private float x; private float y; private float mStartX; private float mStartY; private OnClickListener mClickListener; private WindowManager windowManager = (WindowManager) getContext() .getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // 此windowManagerParams变量为获取的全局变量,用以保存悬浮窗口的属性 private WindowManager.LayoutParams windowManagerParams = ((AnBangApp) getContext() .getApplicationContext()).getWindowParams(); public MoveClickView(Context context) { super(context); } public MoveClickView(Context context, AttributeSet attrs) { super(context, attrs); } public MoveClickView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onTouchEvent(MotionEvent event) { //获取到状态栏的高度 Rect frame = new Rect(); getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top - 48; System.out.println("statusBarHeight:" + statusBarHeight); // 获取相对屏幕的坐标,即以屏幕左上角为原点 x = event.getRawX(); y = event.getRawY() - statusBarHeight; // statusBarHeight是系统状态栏的高度 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 捕获手指触摸按下动作 // 获取相对View的坐标,即以此View左上角为原点 mTouchX = event.getX(); mTouchY = event.getY(); mStartX = x; mStartY = y; Log.i(AnBangApp.TAG, "startX" + mTouchX + "====startY" + mTouchY); break; case MotionEvent.ACTION_MOVE: // 捕获手指触摸移动动作 updateViewPosition(); break; case MotionEvent.ACTION_UP: // 捕获手指触摸离开动作 updateViewPosition(); mTouchX = mTouchY = 0; if ((x - mStartX) < 5 && (y - mStartY) < 5) { if (mClickListener != null) { mClickListener.onClick(this); } } break; } return true; } @Override public void setOnClickListener(OnClickListener l) { this.mClickListener = l; } private void updateViewPosition() { // 更新浮动窗口位置参数 windowManagerParams.x = (int) (x - mTouchX); windowManagerParams.y = (int) (y - mTouchY); windowManager.updateViewLayout(this, windowManagerParams); // 刷新显示 }}
阅读全文
0 0
- 可移动布局(适用于WindowManager)
- html经典布局(适用于移动端)
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- Android Window 二 可移动悬浮窗口 WindowManager
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- Android中可移动悬浮窗口 WindowManager详解
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- Android Window 二 可移动悬浮窗口 WindowManager
- Android Window 二 可移动悬浮窗口 WindowManager
- Android Window 二 可移动悬浮窗口 WindowManager
- WindowManager实现可移动可点击(可只在应用中显示)悬浮窗
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- Android自定义可移动悬浮窗,WindowManager.LayoutParams一些属性介绍
- H5-移动端响应式布局vw,vh替代方案(可灵活搭配)
- 布局动画适用于ViewGroup
- excel模板下载(可适用于各种格式文件下载)
- 移动端自适应:flexible.js可伸缩布局使用
- 可随意移动子VIEW的布局文件
- TCP交互数据流之经受时延的ACK和Nagle算法
- POJ-1363
- 设计模式——借助代理模式体验"间接的美"(一)
- 文件共享
- Kafka安装配置
- 可移动布局(适用于WindowManager)
- 使用SMSSDK完成短信验证时,验证手机号码的工具类
- C++获取文件列表
- margin重叠
- 获取颜色十六进制的方法
- 外部依赖项
- javascript高性能写法
- 100部5星国外经典电影
- frame for "Collection View" will be different at run time Swift3 iOS 10