app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
@@ -1,21 +1,44 @@
package com.application.zhangshi_app_android.ui.function;
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.android.app_base.base.view.BaseFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer;
import com.android.app_base.manager.AppManager;
import com.android.app_base.utils.ScreenSizeUtils;
import com.application.zhangshi_app_android.BR;
import com.application.zhangshi_app_android.R;
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;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Ljj
 * @date 2023.03.15. 20:14
 * @desc 功能 Fragment
 */
public class FunctionFragment extends BaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> {
    public FunctionFragment() {
public class FunctionFragment extends DLBaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> {
    private PopupWindow mOperatePopupWindow;
    private PopupWindow mAddPopupWindow;
    private ImageCarouselFragment imageCarouselFragment;
    private VideoCarouselFragment videoCarouselFragment;
    private FunctionFragment() {
    }
    public static FunctionFragment newInstance() {
@@ -41,6 +64,12 @@
    @Override
    protected void initView() {
        binding.layoutHomeRootNet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.start(getSelfActivity(), HomeFragment.class);
            }
        });
        binding.layoutFamilyMemorabilia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
@@ -59,27 +88,198 @@
                AppManager.getAppManager().startActivity(FamilyAssetsActivity.class);
            }
        });
        binding.layoutHomeDevices.setOnClickListener(new View.OnClickListener() {
        binding.layoutHomeDevices.setOnClickListener(view -> {
            AppManager.getAppManager().startActivity(HomeDevicesActivity.class);
        });
        binding.layoutGrowingUp.setOnClickListener(view -> {
            AppManager.getAppManager().startActivity(GrowthExperienceActivity.class);
        });
        binding.layoutHonorCollection.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(HonorCollectionActivity.class);
        });
        binding.layoutLittleDoctor.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(LittleDoctorActivity.class);
        });
        binding.layoutCleanStorage.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(CleanStorageActivity.class);
        });
        binding.layoutPet.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(PetActivity.class);
        });
        binding.layoutIncomeAndExpenses.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(IncomeAndExpensesActivity.class);
        });
        binding.layoutProperty.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(PropertyActivity.class);
        });
        binding.layoutHundredWish.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(HundredWishActivity.class);
        });
        binding.layoutCertificateOfHonor.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(CertificateOfHonorActivity.class);
        });
        binding.layoutMarriage.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(MarriageActivity.class);
        });
        binding.layoutHealthCare.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(HealthCareActivity.class);
        });
        binding.layoutPrivacy.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(PrivacyActivity.class);
        });
        binding.layoutTourism.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(TourismActivity.class);
        });
        binding.layoutContacts.setOnClickListener(v->{
            AppManager.getAppManager().startActivity(ContactsActivity.class);
        });
        binding.fabAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AppManager.getAppManager().startActivity(HomeDevicesActivity.class);
            public void onClick(View v) {
            }
        });
        binding.layoutGrowingUp.setOnClickListener(new View.OnClickListener() {
        binding.fabAdd.setOnTouchListener(new View.OnTouchListener() {
            private boolean isDragging = false;
            private int startX, startY;
            private float dX, dY;
            @Override
            public void onClick(View view) {
                AppManager.getAppManager().startActivity(GrowthExperienceActivity.class);
            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) {
                AppManager.getAppManager().startActivity(new Intent(getSelfActivity(),ImageSelectActivity.class).putExtra("flag",0).putExtra("list", (Serializable) imageCarouselFragment.getImageList()));
            }
        });
        //右上角操作弹窗
        mOperatePopupWindow = initPopUpWindow(View.inflate(getSelfActivity(),R.layout.pop_switch_video_or_image,null));
        mOperatePopupWindow.getContentView().findViewById(R.id.tv_image).setOnClickListener(v -> {
            mOperatePopupWindow.dismiss();
            imageCarouselFragment = ImageCarouselFragment.newInstance();
            replaceFragment(imageCarouselFragment);
            imageCarouselFragment.setImageList(viewModel.getImageListLiveData().getValue());
            binding.ivOperateSelect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AppManager.getAppManager().startActivity(new Intent(getSelfActivity(),ImageSelectActivity.class).putExtra("flag",0).putExtra("list", (Serializable) imageCarouselFragment.getImageList()));
                }
            });
        });
        mOperatePopupWindow.getContentView().findViewById(R.id.tv_video).setOnClickListener(v -> {
            mOperatePopupWindow.dismiss();
            videoCarouselFragment = VideoCarouselFragment.newInstance();
            replaceFragment(videoCarouselFragment);
            videoCarouselFragment.setVideoList(viewModel.getVideoListLiveData().getValue());
            binding.ivOperateSelect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AppManager.getAppManager().startActivity(new Intent(getSelfActivity(),ImageSelectActivity.class).putExtra("flag",1).putExtra("list", (Serializable) videoCarouselFragment.getVideoList()));
                }
            });
        });
        //点击弹出操作弹窗
        binding.ivOperate.setOnClickListener(v -> {
            mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(getSelfActivity(),85) +binding.ivOperate.getWidth(),0);
        });
        imageCarouselFragment = ImageCarouselFragment.newInstance();
        replaceFragment(imageCarouselFragment);
    }
    public void replaceFragment(Fragment fragment){
        FragmentTransaction transaction = getSelfActivity().getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.layout_frame,fragment);
        transaction.commit();
    }
    @Override
    protected void initData() {
        viewModel.getBannerData();
    }
    @Override
    protected void initData() {
    public void onResume() {
        super.onResume();
        initData();
    }
    @Override
    protected void initLiveDataObserve() {
        viewModel.getImageListLiveData().observe(this, new Observer<List<BannerBean>>() {
            @Override
            public void onChanged(List<BannerBean> bannerBeans) {
                if (imageCarouselFragment != null){
                    imageCarouselFragment.setImageList(bannerBeans);
                }
            }
        });
        viewModel.getVideoListLiveData().observe(this, new Observer<List<BannerBean>>() {
            @Override
            public void onChanged(List<BannerBean> bannerBeans) {
                if (videoCarouselFragment != null){
                    videoCarouselFragment.setVideoList(bannerBeans);
                }
            }
        });
    }
@@ -88,5 +288,5 @@
        return true;
    }
}