android控件与悬浮窗的移动

这篇博客介绍了如何使Android控件跟随手指移动。关键在于设置OnTouchListener,通过ACTION_DOWN、ACTION_MOVE和ACTION_UP事件来捕捉坐标变化,进而调整控件的位置。在ACTION_DOWN中记录初始坐标,在ACTION_MOVE中计算移动距离并更新控件布局,ACTION_UP则表示松开手指。确保在onTouch方法中返回true以保持监听有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一些控件想要做到控件随手指移动而移动

就需要用到以下代码

首先就是获取控件id,悬浮窗同理

(控件类型)name = findViewById(R.id.id名字)

建议再同一个方法里面,启用调用就行

移动代码不想讲,自己放事例

注意控件的类型已经id名字更改

调用 移动();

代码如下

public void 移动(){
       LinearLayout yd = findViewById(R.id.yd);
        yd.setOnTouchListener(new View.OnTouchListener() {
                private int startY;
                private int startX;

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    LinearLayout yd = findViewById(R.id.yd);
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            
                            //获取当前按下的坐标
                            startX = (int) event.getRawX();
                            startY = (int) event.getRawY();
                            break;
                        case MotionEvent.ACTION_MOVE:
                            //获取移动后的坐标
                            int moveX = (int) event.getRawX();
                            int moveY = (int) event.getRawY();
                            //拿到手指移动距离的大小
                            int move_bigX = moveX - startX;
                            int move_bigY = moveY - startY;
                            
                            //拿到当前控件未移动的坐标
                            int left = yd.getLeft();
                            int top = yd.getTop();
                            left += move_bigX;
                            top += move_bigY;
                            int right = left + yd.getWidth();
                            int bottom = top + yd.getHeight();
                            yd.layout(left, top, right, bottom);
                            startX = moveX;
                            startY = moveY;
                            break;
                        case MotionEvent.ACTION_UP:
                            
                            break;
                    }
                    return true;//此处一定要返回true,否则监听不生效
                }
            });
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值