| | |
| | | |
| | | import android.content.Intent; |
| | | import android.os.Bundle; |
| | | import android.view.GestureDetector; |
| | | import android.view.MotionEvent; |
| | | import android.view.View; |
| | | import android.widget.PopupWindow; |
| | | |
| | |
| | | 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; |
| | | |
| | |
| | | public class FunctionFragment extends DLBaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> { |
| | | |
| | | private PopupWindow mOperatePopupWindow; |
| | | private PopupWindow mAddPopupWindow; |
| | | private ImageCarouselFragment imageCarouselFragment; |
| | | private VideoCarouselFragment videoCarouselFragment; |
| | | |
| | |
| | | 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) { |
| | |
| | | protected boolean isStatusBarImmersionEnabled() { |
| | | return true; |
| | | } |
| | | |
| | | } |
| | | |