From 82e57df230ecb744af6c8865f80870ba03c86d89 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期二, 25 七月 2023 22:18:27 +0800 Subject: [PATCH] 基本功能完成 --- app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java | 464 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 424 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java b/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java index fff69fb..e6db79c 100644 --- a/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java +++ b/app/src/main/java/com/application/zhangshi_app_android/ui/home/HomeFragment.java @@ -1,28 +1,63 @@ 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 BaseFragment<FragmentHomeBinding,HomeFragmentViewModel> { - private PopupWindow mPopupWindow; - private HomeMemberAdapter homeMemberAdapter; +public class HomeFragment extends DLBaseFragment<FragmentHomeBinding,HomeFragmentViewModel> { + private PopupWindow mOperatePopupWindow; + private ViewOperator firstViewOperator1;//绗竴浠� + private ViewOperator firstViewOperator2;//绗竴浠� + private List<ViewOperator> secondSelfList;//绗簩浠e洓涓垎鏀� + private List<ViewOperator> secondSpouseList;//绗簩浠e洓涓垎鏀殑閰嶅伓 + + private List<List<ViewOperator>> thirdSelfListList;//绗笁浠e洓涓垎鏀殑鍒楄〃 + + + private List<List<ViewOperator>> fourthSelfListList;//绗洓浠e洓涓垎鏀殑鍒楄〃 + + public HomeFragment() { } @@ -49,35 +84,332 @@ } + @SuppressLint("ClickableViewAccessibility") @Override protected void initView() { - mPopupWindow = new PopupWindow(getSelfActivity()); - mPopupWindow.setContentView(View.inflate(getSelfActivity(),R.layout.pop_basic_information,null)); - mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); - mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x0000)); - mPopupWindow.setAnimationStyle(com.android.app_base.R.style.pop_info); - mPopupWindow.setFocusable(true); - mPopupWindow.setTouchable(true); - mPopupWindow.setOutsideTouchable(true); + 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); + } + }); + } - homeMemberAdapter = new HomeMemberAdapter(getSelfActivity()); - LinearItemDecoration itemDecoration = new LinearItemDecoration(); - itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_8)); - itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); - itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); - binding.rvHomeMember.addItemDecoration(itemDecoration); - binding.rvHomeMember.setAdapter(homeMemberAdapter); + @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<ViewOperator> 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<ViewOperator> 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<ViewOperator> 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<ViewOperator> 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<ViewOperator> fourthSelfList1 = new ArrayList<>(); + fourthSelfList1.add(new ViewOperator(binding.tvFourth11,binding.ivFourth11)); + fourthSelfList1.add(new ViewOperator(binding.tvFourth12,binding.ivFourth12)); + fourthSelfListList.add(fourthSelfList1); + + List<ViewOperator> 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<ViewOperator> 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<ViewOperator> 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<Integer>() { + @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<ViewOperator> viewOperators : thirdSelfListList) { + for (ViewOperator viewOperator : viewOperators) { + viewOperator.setVisibility(View.GONE); + } + } + for (List<ViewOperator> 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<ViewOperator> viewOperators : thirdSelfListList) { + for (ViewOperator viewOperator : viewOperators) { + viewOperator.setVisibility(View.GONE); + } + } + for (List<ViewOperator> 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<ViewOperator> viewOperators : thirdSelfListList) { + for (ViewOperator viewOperator : viewOperators) { + if (viewOperator.selfBean != null) { + viewOperator.setVisibility(View.VISIBLE); + }else { + viewOperator.setVisibility(View.GONE); + } + } + } + for (List<ViewOperator> 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<ViewOperator> viewOperators : thirdSelfListList) { + for (ViewOperator viewOperator : viewOperators) { + if (viewOperator.selfBean != null) { + viewOperator.setVisibility(View.VISIBLE); + }else { + viewOperator.setVisibility(View.GONE); + } + } + } + for (List<ViewOperator> 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<List<HomeRootBean>>() { + @Override + public void onChanged(List<HomeRootBean> homeRootBeans) { + if (homeRootBeans.size() > 0){ + //濉厖绗竴浠f暟鎹� + firstViewOperator1.setBean(homeRootBeans.get(0),homeRootBeans.get(0).getSpouse()); + firstViewOperator2.setBean(homeRootBeans.get(0).getSpouse(),homeRootBeans.get(0)); + List<HomeRootBean> secondGeneration = homeRootBeans.get(0).getChildList();//绗簩浠d汉鍛� + for (int i = 0; i < Math.min(homeRootBeans.get(0).getChildList().size(),4); i++) { + //濉厖绗琲鍒嗘敮鐨勭浜屼唬鏁版嵁 + secondSelfList.get(i).setBean(secondGeneration.get(i),secondGeneration.get(i).getSpouse()); + secondSpouseList.get(i).setBean(secondGeneration.get(i).getSpouse(),secondGeneration.get(i)); + + List<HomeRootBean> thirdGeneration = secondGeneration.get(i).getChildList();//绗琲鍒嗘敮鐨勭涓変唬浜哄憳 + List<ViewOperator> thirdList = thirdSelfListList.get(i);//绗琲鍒嗘敮鐨勭涓変唬瀵瑰簲view + + List<HomeRootBean> fourthGeneration = new ArrayList<>();//绗琲鍒嗘敮鐨勭鍥涗唬浜哄憳 + List<ViewOperator> fourthList = fourthSelfListList.get(i);//绗琲鍒嗘敮鐨勭鍥涗唬瀵瑰簲view + + for (int j = 0; j < Math.min(thirdGeneration.size(),thirdList.size()); j++) { + //濉厖绗琲鍒嗘敮涓嬬殑绗笁浠f暟鎹� + thirdList.get(j).setBean(thirdGeneration.get(j),thirdGeneration.get(j).getSpouse()); + + fourthGeneration.addAll(thirdGeneration.get(j).getChildList());//鏀堕泦绗琲鍒嗘敮涓嬬殑鍏ㄩ儴绗洓浠d汉鍛� + } + + for (int j = 0; j < Math.min(fourthGeneration.size(),fourthList.size()); j++) { + //濉厖绗琲鍒嗘敮涓嬬殑绗洓浠f暟鎹� + fourthList.get(j).setBean(fourthGeneration.get(j),fourthGeneration.get(j).getSpouse()); + } + } + } + } + }); } @Override @@ -85,27 +417,79 @@ return true; } - private boolean isShow = true; - @Override - public void onLeftClick(TitleBar titleBar) { -// if (isShow) { -// -// mPopupWindow.setHeight(binding.treeView.getHeight()); -// mPopupWindow.showAsDropDown(binding.titleBar,0,0); -// isShow = false; -// }else { -// binding.rvHomeMember.setVisibility(View.VISIBLE); -// binding.treeView.setVisibility(View.GONE); -// binding.layoutHomeRootNet.setVisibility(View.GONE); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// homeMemberAdapter.addItem(new HomeMemberBean("绗竴浠�","寮犱笁","鐢�",null,"2023.09.09","2023.09.09","12345678901","寮犳皬鍏徃","寮犲洓")); -// isShow = 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; + } } } \ No newline at end of file -- Gitblit v1.9.1