package com.application.zhangshi_app_android.ui.function; import android.content.Intent; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.PopupWindow; 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.TreeFragment; import com.application.zhangshi_app_android.ui.main.MainActivity; import java.io.Serializable; import java.util.List; /** * @author Ljj * @date 2023.03.15. 20:14 * @desc 首页 Fragment */ public class HomeFragment extends DLBaseFragment { private PopupWindow mOperatePopupWindow; private ImageCarouselFragment imageCarouselFragment; private VideoCarouselFragment videoCarouselFragment; private HomeFragment() { } public static HomeFragment newInstance() { HomeFragment fragment = new HomeFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override protected int getLayoutId() { return R.layout.fragment_function; } @Override protected int getVariableId() { return BR.viewModel; } @Override protected void initParam() { } @Override protected void initView() { binding.layoutHomeRootNet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity.start(getSelfActivity(), TreeFragment.class); } }); binding.layoutFamilyMemorabilia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AppManager.getAppManager().startActivity(FamilyMemorabiliaActivity.class); } }); binding.layoutGrowingUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AppManager.getAppManager().startActivity(PersonalNotepadActivity.class); } }); binding.layoutFamilyAssets.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AppManager.getAppManager().startActivity(FamilyAssetsActivity.class); } }); binding.layoutFamilyMeeting.setOnClickListener(view -> { AppManager.getAppManager().startActivity(MeetingActivity.class); }); binding.layoutMeetingApprove.setOnClickListener(view -> { AppManager.getAppManager().startActivity(MeetingapproveActivity.class); }); binding.layoutMeetingSta.setOnClickListener(view -> { AppManager.getAppManager().startActivity(MeetingStaActivity.class); }); binding.layoutWebcast.setOnClickListener(view ->{ AppManager.getAppManager().startActivity(WebcastActivity.class); }); binding.layoutWebback.setOnClickListener(view ->{ AppManager.getAppManager().startActivity(WebbackActivity.class); }); binding.layoutHomeDevices.setOnClickListener(view -> { AppManager.getAppManager().startActivity(HomeDevicesActivity.class); }); binding.layoutGrowingUp.setOnClickListener(view -> { AppManager.getAppManager().startActivity(PersonalNotepadActivity.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(AnnualHealthStatusActivity.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 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) { 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 public void onResume() { super.onResume(); initData(); } @Override protected void initLiveDataObserve() { viewModel.getImageListLiveData().observe(this, new Observer>() { @Override public void onChanged(List bannerBeans) { if (imageCarouselFragment != null){ imageCarouselFragment.setImageList(bannerBeans); } } }); viewModel.getVideoListLiveData().observe(this, new Observer>() { @Override public void onChanged(List bannerBeans) { if (videoCarouselFragment != null){ videoCarouselFragment.setVideoList(bannerBeans); } } }); } @Override protected boolean isStatusBarImmersionEnabled() { return true; } }