Android如何实现悬浮可拖拽的Button
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关Android如何实现悬浮可拖拽的Button的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介最近,因为项目需要,需要制作一个界面上可拖拽的按钮
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
科技和互联网公司
互联网科技财经
互联网科技战争
互联网科技未来
没上市的科技互联网公司
互联网科技公司发展
美国互联网科技
壕鑫互联网络科技
大白互联网科技
互联网科技创新企业排名
博兴的互联网电子科技公司
剑昆互联网络科技有限公司临桂
现代互联网科技股
青岛科技大学互联网大赛研究生
互联网科技产业特征
城市宝互联网科技有限公司
互联网相关科技技术
上海乐五互联网科技有限公司
绵阳真晨互联网科技有限公司
互联网高科技绘画
有格互联网科技
保险科技 互联网保险
艾特科技互联网
深圳齐家互联网科技
长亮科技互联网金融
互联网科技大会
国外互联网科技网站
互联网 科技馆
互联网和黑科技的看法
承德科技产业互联网平台