Android如何实现悬浮可拖拽的Button
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章给大家分享的是有关Android如何实现悬浮可拖拽的Button的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介最近,因为项目需要,需要制作一个界面上可拖拽的按钮
千家信息网最后更新 2025年11月10日Android如何实现悬浮可拖拽的Button
这篇文章给大家分享的是有关Android如何实现悬浮可拖拽的Button的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
简介
最近,因为项目需要,需要制作一个界面上可拖拽的按钮,网上也有多实例,看了下大部分都是示例不全或讲解不清晰,效果图也不明显,借此自己记录一番自己的实现方案,以备不时之需,同时也为广大学者可以直接通过拷贝方式完成项目所需。
核心代码实现
1DraggingButton 实现
public class DraggingButton extends android.support.v7.widget.AppCompatButton { private int lastX = 0; private int lastY = 0; private int beginX = 0; private int beginY = 0; private int screenWidth = 720; private int screenHeight = 1280; public DraggingButton(Context context) { this(context, null); } public DraggingButton(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public DraggingButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initData(context); } private void initData(Context context){ WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); // 触摸点与屏幕左边的距离 lastY = (int) event.getRawY(); // 触摸点与屏幕上边的距离 beginX = lastX; beginY = lastY; break; case MotionEvent.ACTION_MOVE: int dx =(int)event.getRawX() - lastX; // x轴拖动的绝对距离 int dy =(int)event.getRawY() - lastY; // y轴拖动的绝对距离 // getLeft(): 子View的左边界到父View的左边界的距离, getRight():子View的右边界到父View的左边界的距离 // 如下几个数据表示view应该在布局中的位置 int left = getLeft() + dx; int top = getTop() + dy; int right = getRight() + dx; int bottom = getBottom() + dy; if(left < 0){ left = 0; right = left + getWidth(); } if(right > screenWidth){ right = screenWidth; left = right - getWidth(); } if(top < 0){ top = 0; bottom = top + getHeight(); } if(bottom>screenHeight){ bottom = screenHeight; top = bottom - getHeight(); } layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: // 解决拖拽的时候松手点击事件触发 if (Math.abs(lastX - beginX) < 10 && Math.abs(lastY - beginY) < 10){ return super.onTouchEvent(event); }else{ setPressed(false); return true; } default: break; } return super.onTouchEvent(event); }}核心代码已经奉献,通过自定义的DraggingButton即可实现可拖拽功能,具体原理主要在于onTouchEvent和layout两个函数的使用,具体细节不在讲述,代码注释比较清晰。
举个栗子
activity中的布局
样式 drag_button_bg.xml
activity 中的代码
private DraggingButton mDraggintView;mDraggintView = (DraggingButton) findViewById(R.id.tv_dragging); mDraggintView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(FloatingActionBtnTestActivity.this, "click", Toast.LENGTH_SHORT).show(); } });感谢各位的阅读!关于"Android如何实现悬浮可拖拽的Button"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
代码
内容
屏幕
布局
更多
核心
篇文章
项目
不错
实用
明显
不时之需
上边
两个
事件
位置
函数
功能
原理
右边
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库管理tidb
小学生网络安全知识测试
数据库的加密产品
网络安全法宣传主题活动
深圳oa软件开发常见问题
服务器一般用多大内存合适
access数据库控件
双路cpu做软件开发
河南亚冠网络技术有限公司
多级代理服务器
dns服务器地址怎么填
数据库的底层存储
网络安全整改自查整改报告
西安皮皮虾互联网科技公司
未来教育网络技术序列号
大专计算机网络技术需要考哪些
我的世界服务器透视
火狐怎么设置网络安全
c语言中的数据库是什么意思
连接三星认证服务器
物联网云服务器选什么配置
软件开发过程中的岗位
数据库系统 设计实现pdf
滨州戴尔服务器代理供应商
组态王数据库查询语句
伴奏网下载软件开发
教师使用网络技术比赛
云聚网络技术有限公司
连锁超市系统网络安全
北京卫视早安北京网络安全日视频