首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 讓 Button 任意位置拖拽:RelativeLayout + Margin 動態調整或觸摸事件實現

     編輯:程式設計疑難解答

方案一:RelativeLayout + LayoutParams 修改 Margin(靜態定位)

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnFloat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拖拽我" />
</RelativeLayout>
Button btn = findViewById(R.id.btnFloat);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) btn.getLayoutParams();
lp.leftMargin = 200;  // 距左邊距
lp.topMargin = 300;   // 距上邊距
btn.setLayoutParams(lp);

方案二:觸摸事件實現真正拖拽(動態互動)

btn.setOnTouchListener((v, event) -> {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            dX = v.getX() - event.getRawX();
            dY = v.getY() - event.getRawY();
            break;
        case MotionEvent.ACTION_MOVE:
            v.animate()
                .x(event.getRawX() + dX)
                .y(event.getRawY() + dY)
                .setDuration(0)
                .start();
            break;
    }
    return true;
});

v.animate().x()/y() 修改視圖在父容器中的座標,配合 setDuration(0) 即時跟隨手指。

方案三:WindowManager + Service 實現系統級懸浮按鈕

  • 需 SYSTEM_ALERT_WINDOW 權限(Android 6.0+ 需用戶授權)。
  • 適合全域懸浮球,非 Activity 內部按鈕。

選擇建議

  • 固定位置佈局 → 方案一。
  • 用戶可拖拽移動 → 方案二。
  • 跨應用懸浮 → 方案三。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved