以下是个人封装控件进行可拖动的一个函数,直接调用就可以,代码如下:
private static int screenWidth;
private static int screenHeight;
private static int lastX;
private static int lastY;
/*** view 的拖动事件* */
public static void moveView(Context mContext,View moveView){try {if(mContext==null||moveView==null){return;}screenWidth=UtilsUI.getMetric(mContext).widthPixels;screenHeight=UtilsUI .getMetric(mContext).heightPixels;moveView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int action=event.getAction();switch(action){case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;/*** layout(l,t,r,b)* l  Left position, relative to parentt  Top position, relative to parentr  Right position, relative to parentb  Bottom position, relative to parent* */case MotionEvent.ACTION_MOVE:int x=(int)event.getRawX();int y=(int)event.getRawY();int dx =x- lastX;int dy =y- lastY;int left = v.getLeft() + dx;int top = v.getTop() + dy;int right = left+v.getWidth();int bottom = top + v.getHeight();if(left < 0){left = 0;right = left + v.getWidth();}if(right > screenWidth){right = screenWidth;left = right - v.getWidth();}if(top < 0){top = 0;bottom = top + v.getHeight();}if(bottom > screenHeight){bottom = screenHeight;top = bottom - v.getHeight();}v.layout(left, top, right, bottom);lastX = (int) event.getRawX();lastY = (int) event.getRawY();setParentLayout(v,left, top);break;case MotionEvent.ACTION_UP:break;}return true;}});} catch (Exception e) {e.printStackTrace();}
}
/*** 改变父布局位置以防止重绘后回到原点的问题* */
private static void setParentLayout(View v,int left, int top) {// 每次移动都要设置其layout,不然由于父布局可能嵌套listview,当父布局发生改变冲毁(如下拉刷新时)则移动的view会回到原来的位置RelativeLayout.LayoutParams lpFeedback = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);int curRight = screenWidth - left - v.getWidth();int curBottom = screenHeight - top - v.getHeight();lpFeedback.setMargins(left, top, curRight, curBottom);v.setLayoutParams(lpFeedback);
}

代码调用:

moveView(myContext,myView)

悬浮框支持可拖动(已解决拖动后刷新回到原点的问题)相关推荐

  1. LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题)

    LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题) 参考文章: (1)LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题) (2)https://www.cn ...

  2. 为 VUE 项目添加 PWA 解决发布后刷新报错问题

    为 VUE 项目添加 PWA 解决发布后刷新报错问题 参考文章: (1)为 VUE 项目添加 PWA 解决发布后刷新报错问题 (2)https://www.cnblogs.com/morang/p/9 ...

  3. Python使用pyinstaller打包成exe文件,并支持传入外部参(已解决打包后文件大的情况)

    目录 一.为什么要打包 二.打包后文件大的问题 三.外部传参 3.1.sys库 3.2.argparse库 四.pyinstaller打包 4.1.安装包 4.2.打包命令 4.3.新环境打包 五.运 ...

  4. Linux工作站开机后鼠标很卡,(已解决)开机后鼠标延迟卡顿1分钟后就没事了是什么情况...

    本帖最后由 mushizhizhi 于 2020-1-2 15:03 编辑 华硕B360M-K i5 8400 uhd630string>                            ...

  5. layui删除后刷新表格_LayUi前端框架删除数据缓存问题(解决删除后刷新页面内容又会显示问题)...

    [HDOJ5952]Counting Cliques(DFS,剪枝) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5952 题意:求图中规模为s的团的 ...

  6. Access denied for user ...(已解决)

    Access denied for user -(已解决) 问题描述 代码 import java.sql.*;public class text {public static void main(S ...

  7. 解决windows10 桌面拖动文件到微信后无反应问题,尝试记录

    解决windows10 桌面拖动文件到微信后无反应问题 Windows 10 1)修改注册表.如图右键"EnableLUA" 选"修改".把值改成"0 ...

  8. element vue 点击一边拖拽改变宽度 解决拖动会选中文字的问题

    实现效果: 实现代码: //最外边的这个是放表格容器的div <div @mousemove="shrinkMove" @mouseup="shrinkUp&quo ...

  9. 【已解决】程序文件被ESET NOD32误杀或拦截怎么办?以ENDPIINT SECURITY为例添加信任教程截图(ESET通用))

    [已解决]程序文件被ESET NOD32误杀或拦截怎么办?以ENDPIINT SECURITY为例添加信任教程截图(ESET通用)) 程序文件可信无病毒,确被"误杀"误伤?如果安装 ...

最新文章

  1. Redis 桌面管理工具 RedisDesktopManager 2020.1 发布
  2. 神策数据王灼洲:方法论 + 实践,全面解析数据采集方案,必看!
  3. [IOI2011]Race
  4. 他患“不死癌症” 坐轮椅考上清华并获特等奖学金
  5. 编写程序,删除数组中重复的元素,并统计各元素出现的次数
  6. 重点做EUR/USD、EUR/JPY、GBP/USD。
  7. 蓝桥杯 ALGO-27 算法训练 FBI树 Java版
  8. 利用SQL SERVER 2008 的XML字段类型实现扩展属性
  9. tomcat启动报错:Address already in use: JVM_Bind
  10. BIO,NIO的区别,使用场景。
  11. php下一页的代码,php 实现文章上一页与下一页 代码
  12. 会计计算机学什么软件有哪些,会计一般要学什么软件
  13. PageHelper分页pageSize和total异常问题
  14. 华为--NAT技术easy IP 原理配置or实验详解
  15. Testbench设计篇1——激励的产生
  16. c++排序(CList类库)
  17. linux 命令 打开png,Linux:优化和压缩JPEG和PNG图片的命令行工具
  18. 青竹画材创业板IPO被终止:年营收4.15亿 文投基金是股东
  19. 全数字化城市道路视频监控存储解决方案
  20. 水泵状态监测与故障诊断

热门文章

  1. LOCAL_PRIVILEGED_MODULE 详解(2)
  2. 【开发工具】C/C++开发者必不可少的15款编译器+IDE
  3. 模块“CHUSBDLL.DLL.dll“可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86或x64版本兼容 【已解决】
  4. 论文笔记翻译——Enhanced LSTM for Natural Language Inference(ESIM)
  5. OpenAL Lesson 2: Looping and Fadeaway(转载)
  6. 字节跳动张一鸣:给互联网人才的一些中肯建议!
  7. python爬虫实例电商_Python实现爬取并分析电商评论
  8. python中shutil是什么意思_python之shutil模块详解
  9. RAM与ROM的原理与区别
  10. 一个可恶的javascript病毒/木马解码之后的代码