package com.application.zhangshi_app_android.ui.home; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.annotation.SuppressLint; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.ScaleAnimation; import android.widget.PopupWindow; import android.widget.TextView; import androidx.constraintlayout.utils.widget.ImageFilterView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.Observer; import com.android.app_base.base.view.BaseFragment; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.GlideUtil; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.HomeMemberAdapter; import com.application.zhangshi_app_android.bean.HomeMemberBean; import com.application.zhangshi_app_android.bean.HomeRootBean; import com.application.zhangshi_app_android.databinding.FragmentHomeBinding; import com.application.zhangshi_app_android.databinding.PopBasicInformationBinding; import com.application.zhangshi_app_android.ui.DLBaseFragment; import com.hjq.bar.TitleBar; import java.util.ArrayList; import java.util.List; /** * @author Ljj * @date 2023.3.15 * @desc 首页 Fragment */ public class HomeFragment extends DLBaseFragment { private PopupWindow mOperatePopupWindow; private ViewOperator firstViewOperator1;//第一代 private ViewOperator firstViewOperator2;//第一代 private List secondSelfList;//第二代四个分支 private List secondSpouseList;//第二代四个分支的配偶 private List> thirdSelfListList;//第三代四个分支的列表 private List> fourthSelfListList;//第四代四个分支的列表 public 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_home; } @Override protected int getVariableId() { return BR.viewModel; } @Override protected void initParam() { } @SuppressLint("ClickableViewAccessibility") @Override protected void initView() { mOperatePopupWindow = initPopUpWindow(View.inflate(getSelfActivity(),R.layout.pop_operate_home_root_net,null)); binding.ivOperate.setOnClickListener(v -> { mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(getSelfActivity(),120) +binding.ivOperate.getWidth(),0); }); mOperatePopupWindow.getContentView().findViewById(R.id.tv_first).setOnClickListener(v -> { binding.ivTreeViewDiff.setBackgroundResource(R.drawable.bg_home_root_net_detail_first); viewModel.setIndexLiveData(0); }); mOperatePopupWindow.getContentView().findViewById(R.id.tv_second).setOnClickListener(v -> { binding.ivTreeViewDiff.setBackgroundResource(R.drawable.bg_home_root_net_detail_second); viewModel.setIndexLiveData(1); }); mOperatePopupWindow.getContentView().findViewById(R.id.tv_third).setOnClickListener(v -> { binding.ivTreeViewDiff.setBackgroundResource(R.drawable.bg_home_root_net_detail_third); viewModel.setIndexLiveData(2); }); mOperatePopupWindow.getContentView().findViewById(R.id.tv_all).setOnClickListener(v -> { binding.ivTreeViewDiff.setBackgroundResource(R.drawable.bg_home_root_net_detail); viewModel.setIndexLiveData(3); }); mOperatePopupWindow.getContentView().findViewById(R.id.tv_family).setOnClickListener(v -> { AppManager.getAppManager().startActivity(GenealogyActivity.class); mOperatePopupWindow.dismiss(); }); final GestureDetector gestureDetector = new GestureDetector(getSelfActivity(), new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(1000); alphaAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { binding.scrollView.setVisibility(View.VISIBLE); binding.scrollView.post(new Runnable() { @Override public void run() { binding.scrollView.scrollTo(binding.scrollView.getChildAt(0).getMeasuredWidth()/2 - ScreenSizeUtils.getScreenWidth(getSelfActivity())/2,0); } }); } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); AlphaAnimation alphaAnimation1 = new AlphaAnimation(1f, 0f); alphaAnimation1.setDuration(1000); alphaAnimation1.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { binding.layoutHomeRootNet.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animation animation) { binding.layoutHomeRootNet.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } }); float scale = binding.layoutHomeRootNet.getWidth()/ (binding.ivTreeView.getWidth() * 2f / 3f); //缩放动画 ScaleAnimation scaleAnimation = new ScaleAnimation(1f, scale, 1f, scale, binding.layoutHomeRootNet.getWidth()/2f, binding.layoutHomeRootNet.getHeight()/2f); scaleAnimation.setDuration(1000); scaleAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { binding.scrollView.startAnimation(alphaAnimation); binding.layoutHomeRootNet.startAnimation(alphaAnimation1); } @Override public void onAnimationRepeat(Animation animation) { } }); binding.layoutHomeRootNet.startAnimation(scaleAnimation); return true; } }); binding.layoutHomeRootNet.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { gestureDetector.onTouchEvent(event); return true; } }); firstViewOperator1 = new ViewOperator(binding.tvFirst1,binding.ivFirst1); firstViewOperator2 = new ViewOperator(binding.tvFirst2,binding.ivFirst2); secondSelfList = new ArrayList<>(); secondSpouseList = new ArrayList<>(); secondSelfList.add(new ViewOperator(binding.tvSecond11,binding.ivSecond11)); secondSpouseList.add(new ViewOperator(binding.tvSecond12,binding.ivSecond12)); secondSelfList.add(new ViewOperator(binding.tvSecond21,binding.ivSecond21)); secondSpouseList.add(new ViewOperator(binding.tvSecond22,binding.ivSecond22)); secondSelfList.add(new ViewOperator(binding.tvSecond31,binding.ivSecond31)); secondSpouseList.add(new ViewOperator(binding.tvSecond32,binding.ivSecond32)); secondSelfList.add(new ViewOperator(binding.tvSecond41,binding.ivSecond41)); secondSpouseList.add(new ViewOperator(binding.tvSecond42,binding.ivSecond42)); thirdSelfListList = new ArrayList<>(); List thirdSelfList1 = new ArrayList<>(); thirdSelfList1.add(new ViewOperator(binding.tvThird11,binding.ivThird11)); thirdSelfList1.add(new ViewOperator(binding.tvThird12,binding.ivThird12)); thirdSelfList1.add(new ViewOperator(binding.tvThird13,binding.ivThird13)); thirdSelfList1.add(new ViewOperator(binding.tvThird14,binding.ivThird14)); thirdSelfListList.add(thirdSelfList1); List thirdSelfList2 = new ArrayList<>(); thirdSelfList2.add(new ViewOperator(binding.tvThird21,binding.ivThird21)); thirdSelfList2.add(new ViewOperator(binding.tvThird22,binding.ivThird22)); thirdSelfList2.add(new ViewOperator(binding.tvThird23,binding.ivThird23)); thirdSelfList2.add(new ViewOperator(binding.tvThird24,binding.ivThird24)); thirdSelfListList.add(thirdSelfList2); List thirdSelfList3 = new ArrayList<>(); thirdSelfList3.add(new ViewOperator(binding.tvThird31,binding.ivThird31)); thirdSelfList3.add(new ViewOperator(binding.tvThird32,binding.ivThird32)); thirdSelfList3.add(new ViewOperator(binding.tvThird33,binding.ivThird33)); thirdSelfList3.add(new ViewOperator(binding.tvThird34,binding.ivThird34)); thirdSelfListList.add(thirdSelfList3); List thirdSelfList4 = new ArrayList<>(); thirdSelfList4.add(new ViewOperator(binding.tvThird41,binding.ivThird41)); thirdSelfList4.add(new ViewOperator(binding.tvThird42,binding.ivThird42)); thirdSelfListList.add(thirdSelfList4); fourthSelfListList = new ArrayList<>(); List fourthSelfList1 = new ArrayList<>(); fourthSelfList1.add(new ViewOperator(binding.tvFourth11,binding.ivFourth11)); fourthSelfList1.add(new ViewOperator(binding.tvFourth12,binding.ivFourth12)); fourthSelfListList.add(fourthSelfList1); List fourthSelfList2 = new ArrayList<>(); fourthSelfList2.add(new ViewOperator(binding.tvFourth21,binding.ivFourth21)); fourthSelfList2.add(new ViewOperator(binding.tvFourth22,binding.ivFourth22)); fourthSelfList2.add(new ViewOperator(binding.tvFourth23,binding.ivFourth23)); fourthSelfList2.add(new ViewOperator(binding.tvFourth24,binding.ivFourth24)); fourthSelfListList.add(fourthSelfList2); List fourthSelfList3 = new ArrayList<>(); fourthSelfList3.add(new ViewOperator(binding.tvFourth31,binding.ivFourth31)); fourthSelfList3.add(new ViewOperator(binding.tvFourth32,binding.ivFourth32)); fourthSelfList3.add(new ViewOperator(binding.tvFourth33,binding.ivFourth33)); fourthSelfList3.add(new ViewOperator(binding.tvFourth34,binding.ivFourth34)); fourthSelfListList.add(fourthSelfList3); List fourthSelfList4 = new ArrayList<>(); fourthSelfList4.add(new ViewOperator(binding.tvFourth41,binding.ivFourth41)); fourthSelfList4.add(new ViewOperator(binding.tvFourth42,binding.ivFourth42)); fourthSelfList4.add(new ViewOperator(binding.tvFourth43,binding.ivFourth43)); fourthSelfListList.add(fourthSelfList4); } @Override protected void initData() { viewModel.getHomeRootBeanList(); } @Override protected void initLiveDataObserve() { viewModel.getIndexLiveData().observe(this, new Observer() { @Override public void onChanged(Integer integer) { firstViewOperator1.setVisibility(View.VISIBLE); firstViewOperator2.setVisibility(View.VISIBLE); if (integer == 0){ for (ViewOperator viewOperator : secondSelfList) { viewOperator.setVisibility(View.GONE); } for (ViewOperator viewOperator : secondSpouseList) { viewOperator.setVisibility(View.GONE); } for (List viewOperators : thirdSelfListList) { for (ViewOperator viewOperator : viewOperators) { viewOperator.setVisibility(View.GONE); } } for (List viewOperators : fourthSelfListList) { for (ViewOperator viewOperator : viewOperators) { viewOperator.setVisibility(View.GONE); } } }else if (integer == 1){ for (int i = 0; i < secondSelfList.size(); i++) { if (secondSelfList.get(i).selfBean != null) { secondSelfList.get(i).setVisibility(View.VISIBLE); }else { secondSelfList.get(i).setVisibility(View.GONE); } if (secondSpouseList.get(i).selfBean != null) { secondSpouseList.get(i).setVisibility(View.VISIBLE); }else { secondSpouseList.get(i).setVisibility(View.GONE); } } for (List viewOperators : thirdSelfListList) { for (ViewOperator viewOperator : viewOperators) { viewOperator.setVisibility(View.GONE); } } for (List viewOperators : fourthSelfListList) { for (ViewOperator viewOperator : viewOperators) { viewOperator.setVisibility(View.GONE); } } }else if (integer == 2){ for (int i = 0; i < secondSelfList.size(); i++) { if (secondSelfList.get(i).selfBean != null) { secondSelfList.get(i).setVisibility(View.VISIBLE); }else { secondSelfList.get(i).setVisibility(View.GONE); } if (secondSpouseList.get(i).selfBean != null) { secondSpouseList.get(i).setVisibility(View.VISIBLE); }else { secondSpouseList.get(i).setVisibility(View.GONE); } } for (List viewOperators : thirdSelfListList) { for (ViewOperator viewOperator : viewOperators) { if (viewOperator.selfBean != null) { viewOperator.setVisibility(View.VISIBLE); }else { viewOperator.setVisibility(View.GONE); } } } for (List viewOperators : fourthSelfListList) { for (ViewOperator viewOperator : viewOperators) { viewOperator.setVisibility(View.GONE); } } }else if (integer == 3){ for (int i = 0; i < secondSelfList.size(); i++) { if (secondSelfList.get(i).selfBean != null) { secondSelfList.get(i).setVisibility(View.VISIBLE); }else { secondSelfList.get(i).setVisibility(View.GONE); } if (secondSpouseList.get(i).selfBean != null) { secondSpouseList.get(i).setVisibility(View.VISIBLE); }else { secondSpouseList.get(i).setVisibility(View.GONE); } } for (List viewOperators : thirdSelfListList) { for (ViewOperator viewOperator : viewOperators) { if (viewOperator.selfBean != null) { viewOperator.setVisibility(View.VISIBLE); }else { viewOperator.setVisibility(View.GONE); } } } for (List viewOperators : fourthSelfListList) { for (ViewOperator viewOperator : viewOperators) { if (viewOperator.selfBean != null) { viewOperator.setVisibility(View.VISIBLE); }else { viewOperator.setVisibility(View.GONE); } } } } } }); viewModel.getHomeRootBeanLiveData().observe(this, new Observer>() { @Override public void onChanged(List homeRootBeans) { if (homeRootBeans.size() > 0){ //填充第一代数据 firstViewOperator1.setBean(homeRootBeans.get(0),homeRootBeans.get(0).getSpouse()); firstViewOperator2.setBean(homeRootBeans.get(0).getSpouse(),homeRootBeans.get(0)); List secondGeneration = homeRootBeans.get(0).getChildList();//第二代人员 for (int i = 0; i < Math.min(homeRootBeans.get(0).getChildList().size(),4); i++) { //填充第i分支的第二代数据 secondSelfList.get(i).setBean(secondGeneration.get(i),secondGeneration.get(i).getSpouse()); secondSpouseList.get(i).setBean(secondGeneration.get(i).getSpouse(),secondGeneration.get(i)); List thirdGeneration = secondGeneration.get(i).getChildList();//第i分支的第三代人员 List thirdList = thirdSelfListList.get(i);//第i分支的第三代对应view List fourthGeneration = new ArrayList<>();//第i分支的第四代人员 List fourthList = fourthSelfListList.get(i);//第i分支的第四代对应view for (int j = 0; j < Math.min(thirdGeneration.size(),thirdList.size()); j++) { //填充第i分支下的第三代数据 thirdList.get(j).setBean(thirdGeneration.get(j),thirdGeneration.get(j).getSpouse()); fourthGeneration.addAll(thirdGeneration.get(j).getChildList());//收集第i分支下的全部第四代人员 } for (int j = 0; j < Math.min(fourthGeneration.size(),fourthList.size()); j++) { //填充第i分支下的第四代数据 fourthList.get(j).setBean(fourthGeneration.get(j),fourthGeneration.get(j).getSpouse()); } } } } }); } @Override protected boolean isStatusBarImmersionEnabled() { return true; } private class ViewOperator{ private TextView tvIndex; private ImageFilterView ivHead; private HomeRootBean selfBean; private HomeRootBean spouseBean; public ViewOperator(TextView tvIndex, ImageFilterView ivHead) { this.tvIndex = tvIndex; this.ivHead = ivHead; } public void setVisibility(int visibility){ tvIndex.setVisibility(visibility); ivHead.setVisibility(visibility); } public void setBean(HomeRootBean selfBean, HomeRootBean spouseBean) { this.selfBean = selfBean; this.spouseBean = spouseBean; if (selfBean == null){ tvIndex.setVisibility(View.GONE); ivHead.setVisibility(View.GONE); return; }else { tvIndex.setVisibility(View.VISIBLE); ivHead.setVisibility(View.VISIBLE); } GlideUtil.loadImage(selfBean.getImg(), ivHead); View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { PopBasicInformationBinding mBinding= DataBindingUtil.inflate(getLayoutInflater(),R.layout.pop_basic_information,null,false); PopupWindow mPopupWindow = initPopUpWindow(mBinding.getRoot()); mPopupWindow.setHeight(binding.layoutParent.getHeight()); mPopupWindow.setWidth(binding.layoutParent.getWidth()); mBinding.setSelfBean(selfBean); mBinding.setSpouseBean(spouseBean); mPopupWindow.showAsDropDown(binding.titleBar,0,0); } }; ivHead.setOnClickListener(clickListener); tvIndex.setOnClickListener(clickListener); } public TextView getTvIndex() { return tvIndex; } public void setTvIndex(TextView tvIndex) { this.tvIndex = tvIndex; } public ImageFilterView getIvHead() { return ivHead; } public void setIvHead(ImageFilterView ivHead) { this.ivHead = ivHead; } public HomeRootBean getSelfBean() { return selfBean; } public void setSelfBean(HomeRootBean selfBean) { this.selfBean = selfBean; } public HomeRootBean getSpouseBean() { return spouseBean; } public void setSpouseBean(HomeRootBean spouseBean) { this.spouseBean = spouseBean; } } }