app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
@@ -2,6 +2,8 @@
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.PopupWindow;
@@ -16,6 +18,7 @@
import com.application.zhangshi_app_android.bean.BannerBean;
import com.application.zhangshi_app_android.databinding.FragmentFunctionBinding;
import com.application.zhangshi_app_android.ui.DLBaseFragment;
import com.application.zhangshi_app_android.ui.dialog.TotalAddDialog;
import com.application.zhangshi_app_android.ui.home.HomeFragment;
import com.application.zhangshi_app_android.ui.main.MainActivity;
@@ -31,6 +34,7 @@
public class FunctionFragment extends DLBaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> {
    private PopupWindow mOperatePopupWindow;
    private PopupWindow mAddPopupWindow;
    private ImageCarouselFragment imageCarouselFragment;
    private VideoCarouselFragment videoCarouselFragment;
@@ -130,6 +134,76 @@
            AppManager.getAppManager().startActivity(ContactsActivity.class);
        });
        binding.fabAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
        binding.fabAdd.setOnTouchListener(new View.OnTouchListener() {
            private boolean isDragging = false;
            private int startX, startY;
            private float dX, dY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                boolean flag = false;
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        // 计算手指按下时相对于 FloatingActionButton 的偏移量
                        dX = v.getX() - event.getRawX();
                        dY = v.getY() - event.getRawY();
                        startY = (int) event.getRawY();
                        startX = (int) event.getRawX();
                        isDragging = false;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        // 更新 FloatingActionButton 的位置
                        float newX = event.getRawX() + dX;
                        float newY = event.getRawY() + dY;
                        // 限制移动范围
                        float minX = 0;
                        float maxX = binding.container.getWidth() - v.getWidth();
                        float minY = 0;
                        float maxY = binding.container.getHeight() - v.getHeight();
                        // 确保不超出范围
                        if (newX < minX) {
                            newX = minX;
                        } else if (newX > maxX) {
                            newX = maxX;
                        }
                        if (newY < minY) {
                            newY = minY;
                        } else if (newY > maxY) {
                            newY = maxY;
                        }
                        v.setX(newX);
                        v.setY(newY);
                        if (Math.abs(event.getRawX() - startX) > 10 || Math.abs(event.getRawY() - startY) > 10) {
                            isDragging = true; // 如果移动距离大于阈值,认为是拖动
                        }else {
                            isDragging = false;
                        }
                        flag = true;
                        break;
                    case MotionEvent.ACTION_UP:
                        if (!isDragging) {
                            // 如果没有拖动,认为是点击事件
                            new TotalAddDialog.Builder(getContext()).show();
                        }
                        break;
                    default:
                        break;
                }
                return flag;
            }
        });
        binding.ivOperateSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -213,5 +287,6 @@
    protected boolean isStatusBarImmersionEnabled() {
        return true;
    }
}