From ecaf8069072e71db4bff94671e72764b211d6af1 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期四, 26 十月 2023 00:43:51 +0800
Subject: [PATCH] 功能完善

---
 app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java |  258 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 191 insertions(+), 67 deletions(-)

diff --git a/app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java b/app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java
index 2c797a4..3821393 100644
--- a/app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java
+++ b/app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java
@@ -1,14 +1,23 @@
 package com.application.zhangshi_app_android.ui.function;
 
-import android.graphics.drawable.ColorDrawable;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Transformation;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 
 
+import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.lifecycle.Observer;
-import androidx.viewpager.widget.ViewPager;
 
+import com.android.app_base.manager.AppManager;
+import com.android.app_base.utils.ScreenSizeUtils;
+import com.android.app_base.utils.ToastUtils;
 import com.android.app_base.widget.LinearItemDecoration;
 import com.application.zhangshi_app_android.BR;
 import com.application.zhangshi_app_android.R;
@@ -37,6 +46,9 @@
     private GrowthExperienceHolderConditionRvAdapter holderConditionRvAdapter;
     private GrowthExperienceAbroadConditionRvAdapter abroadConditionRvAdapter;
 
+    private PopupWindow mOperatePopupWindow;
+
+
     @Override
     public int getLayoutId() {
         return R.layout.activity_growth_experience;
@@ -52,9 +64,6 @@
 
     }
 
-    // 璁剧疆閫変腑鏁堟灉
-
-
     @Override
     public void initView() {
         primaryRvAdapter = new GrowthExperiencePrimaryRvAdapter(this);
@@ -62,76 +71,122 @@
         holderConditionRvAdapter = new GrowthExperienceHolderConditionRvAdapter(this );
         abroadConditionRvAdapter = new GrowthExperienceAbroadConditionRvAdapter(this);
 
-
         LinearItemDecoration itemDecoration = new LinearItemDecoration();
         itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12));
-        itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_16));
 
         binding.rvPrimary.addItemDecoration(itemDecoration);
+        binding.rvPrimary.setNestedScrollingEnabled(false);
         binding.rvPrimary.setAdapter(primaryRvAdapter);
         binding.rvRelationship.addItemDecoration(itemDecoration);
+        binding.rvRelationship.setNestedScrollingEnabled(false);
         binding.rvRelationship.setAdapter(relationshipRvAdapter);
         binding.rvCertificates.addItemDecoration(itemDecoration);
+        binding.rvCertificates.setNestedScrollingEnabled(false);
         binding.rvCertificates.setAdapter(holderConditionRvAdapter);
         binding.rvAbroad.addItemDecoration(itemDecoration);
+        binding.rvAbroad.setNestedScrollingEnabled(false);
         binding.rvAbroad.setAdapter(abroadConditionRvAdapter);
 
-        //杩欓噷鐨則ab鏁伴噺灏辨槸鍚庡彴杩斿洖鐨勬暟鎹噺锛宼ab鐨勬爣棰樹篃鏄悗鍙拌繑鍥炵殑锛屼絾鏄瘂"id":1,"userId":110,"type":1,"content":"濠村効鏃舵湡鎴戝緢蹇箰"}鍚庡彴鐨勮繑鍥炴暟鎹病鏈夎繖涓椂闂存锛屼綘灏卞緱闂竴涓嬶紝鐪嬩笉鎳傚悧锛燂紵
-        binding.tabLayout.addTab(binding.tabLayout.newTab().setText("0-3宀侊紙濠村効鏈燂級"));
-        binding.tabLayout.addTab(binding.tabLayout.newTab().setText("3-6宀侊紙骞煎効鏈燂級"));
-        binding.tabLayout.addTab(binding.tabLayout.newTab().setText("6-9宀侊紙闈掑勾鏈燂級 "));
-
-        //灏变笉鐭ラ亾鑴戝瓙鍦ㄦ兂浠�涔�
-        binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+        mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_personal_notepad,null));
+        mOperatePopupWindow.getContentView().findViewById(R.id.layout_personal_notepad).setOnClickListener(new View.OnClickListener() {
             @Override
-            public void onTabSelected(TabLayout.Tab tab) {
-                // 褰撶敤鎴烽�変腑涓�涓� Tab 鏃跺洖璋�
-                // 杩欓噷鍙互鏍规嵁 Tab 鐨勪綅缃潵鍒囨崲鐩稿簲鐨勯〉闈�
-                switch (tab.getPosition()) {
-                    case 0:
-                        // 鍒囨崲鍒� 0-3 宀侀〉闈�
-                        break;
-                    case 1:
-                        // 鍒囨崲鍒� 3-6 宀侀〉闈�
-                        break;
-                    case 2:
-                        // 鍒囨崲鍒� 6-9 宀侀〉闈�
-                        break;
-                    default:
-                        break;
-                }
-            }
-            @Override
-            public void onTabUnselected(TabLayout.Tab tab) {
-                // 褰撶敤鎴峰彇娑堥�変腑涓�涓� Tab 鏃跺洖璋�
-            }
-
-            @Override
-            public void onTabReselected(TabLayout.Tab tab) {
-                // 褰撶敤鎴峰啀娆¢�変腑涓�涓凡缁忛�変腑鐨� Tab 鏃跺洖璋�
+            public void onClick(View v) {
+                mOperatePopupWindow.dismiss();
+                AppManager.getAppManager().startActivity(PersonalNotepadActivity.class);
             }
         });
-        // 鍒涘缓 ViewPager 骞惰缃� Adapter
-        ViewPager viewPager = binding.viewPager;
-        // 灏� TabLayout 涓� ViewPager 鍏宠仈璧锋潵
-        binding.tabLayout.setupWithViewPager(viewPager);
+        binding.ivOperate.setOnClickListener(v -> {
+            mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0);
+        });
 
+        final int SCROLL_THRESHOLD = 400; // 婊戝姩闃堝�硷紝鎸夐挳鍦ㄦ粦鍔ㄨ秴杩囪闃堝�煎悗寮�濮嬫牴鎹秴鍑洪槇鍊艰窛绂绘笎娓愭樉绀哄嚭鏉�
+        final int SCROLL_DISTANCE = 400; // 鎸夐挳浠庨殣钘忓埌鍏ㄩ儴鏄剧ず鍑烘潵闇�瑕佹粦鍔ㄧ殑璺濈
+        binding.fabMoveToTop.setAlpha(0f);
+        binding.nestedScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
+            @Override
+            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
+                // 褰撴粦鍔ㄨ窛绂昏秴杩囬槇鍊间竴鍗婃椂锛屽紑濮嬫參鎱㈡樉绀烘寜閽�
+                if (scrollY >= SCROLL_THRESHOLD) {
+                    // 鏍规嵁婊戝姩璺濈璁剧疆鎸夐挳閫忔槑搴�
+                    float alpha = Math.min(1.0f, (float) (scrollY - SCROLL_THRESHOLD) / SCROLL_DISTANCE);
+                    binding.fabMoveToTop.setAlpha(alpha);
+                } else {
+                    binding.fabMoveToTop.setAlpha(0f);
+                }
+            }
+        });
+        binding.fabMoveToTop.setOnClickListener(v -> {
+            // 鐐瑰嚮鎸夐挳杩斿洖椤堕儴
+            binding.nestedScrollView.smoothScrollTo(0, 0);
+        });
     }
 
     @Override
     public void initData() {
-     viewModel.getInfo();
-      viewModel.getGrowthExperience();
-       viewModel.getRelation();
-       viewModel.getHolder();
-       viewModel.getAbroad();
+        viewModel.getInfo();
+        viewModel.getGrowthExperience();
+        viewModel.getRelation();
+        viewModel.getHolder();
+        viewModel.getAbroad();
         viewModel.getGrowthExperienceAutobiography();
     }
 
 
     @Override
     public void initLiveDataObserve() {
-        viewModel.getPrimaryLiveData().observe(this, new Observer<List<GrowthExperienceBean>>() {
+        viewModel.getIsExperienceExpendedLiveData().observe(this, aBoolean -> {
+            if (aBoolean){
+                binding.layoutExperienceTitle.setOnClickListener(view -> {
+                    collapseView(binding.layoutExperience,binding.layoutExperienceTitle);
+                    viewModel.getIsExperienceExpendedLiveData().setValue(false);
+                });
+            }else {
+                binding.layoutExperienceTitle.setOnClickListener(view -> {
+                    expendView(binding.layoutExperience);
+                    viewModel.getIsExperienceExpendedLiveData().setValue(true);
+                });
+            }
+        });
+        viewModel.getIsRelationExpendedLiveData().observe(this, aBoolean -> {
+            if (aBoolean){
+                binding.layoutRelationTitle.setOnClickListener(view -> {
+                    collapseView(binding.layoutRelation,binding.layoutRelationTitle);
+                    viewModel.getIsRelationExpendedLiveData().setValue(false);
+                });
+            }else {
+                binding.layoutRelationTitle.setOnClickListener(view -> {
+                    expendView(binding.layoutRelation);
+                    viewModel.getIsRelationExpendedLiveData().setValue(true);
+                });
+            }
+        });
+        viewModel.getIsHolderExpendedLiveData().observe(this, aBoolean -> {
+            if (aBoolean){
+                binding.layoutHolderTitle.setOnClickListener(view -> {
+                    collapseView(binding.layoutHolder,binding.layoutHolderTitle);
+                    viewModel.getIsHolderExpendedLiveData().setValue(false);
+                });
+            }else {
+                binding.layoutHolderTitle.setOnClickListener(view -> {
+                    expendView(binding.layoutHolder);
+                    viewModel.getIsHolderExpendedLiveData().setValue(true);
+                });
+            }
+        });
+        viewModel.getIsAbroadExpendedLiveData().observe(this, aBoolean -> {
+            if (aBoolean){
+                binding.layoutAbroadTitle.setOnClickListener(view -> {
+                    collapseView(binding.layoutAbroad,binding.layoutAbroadTitle);
+                    viewModel.getIsAbroadExpendedLiveData().setValue(false);
+                });
+            }else {
+                binding.layoutAbroadTitle.setOnClickListener(view -> {
+                    expendView(binding.layoutAbroad);
+                    viewModel.getIsAbroadExpendedLiveData().setValue(true);
+                });
+            }
+        });
+        viewModel.getExperienceListLiveData().observe(this, new Observer<List<GrowthExperienceBean>>() {
             @Override
             public void onChanged(List<GrowthExperienceBean> growthExperienceBeans) {
                 primaryRvAdapter.setData(growthExperienceBeans);
@@ -155,26 +210,95 @@
                 abroadConditionRvAdapter.setData(growthExperienceAbroadConditionBeans);
             }
         });
+        viewModel.getAutobiographyLiveData().observe(this, new Observer<List<GrowthExperienceAutobiographyBean>>() {
+            @Override
+            public void onChanged(List<GrowthExperienceAutobiographyBean> beans) {
+                if (beans==null||beans.size() == 0 ){
+                    binding.tvFill.setVisibility(View.GONE);
+                    return;
+                }else {
+                    binding.tvFill.setVisibility(View.VISIBLE);
+                }
+                binding.tabLayout.removeAllTabs();
+                for (int i = 0; i < beans.size(); i++) {
+                    GrowthExperienceAutobiographyBean bean = beans.get(i);
+                    String tabText = bean.getAgeBegin()+"-"+bean.getAgeEnd()+"宀�("+bean.getTerm()+")";
+                    TabLayout.Tab tab = binding.tabLayout.newTab().setText(tabText);
+                    if (i % 2 == 0){
+                        tab.view.setBackgroundResource(R.drawable.selector_tab_background_pink);
+                    }else {
+                        tab.view.setBackgroundResource(R.drawable.selector_tab_background_blue);
+                    }
+                    //鍙栨秷tab鐨勯暱鎸夋樉绀烘枃鏈�
+                    tab.view.setOnLongClickListener(new View.OnLongClickListener() {
+                        @Override
+                        public boolean onLongClick(View v) {
+                            return true;
+                        }
+                    });
+                    binding.tabLayout.addTab(tab);
+                }
+                binding.tvFill.setText(beans.get(0).getContent());
+                binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+                    @Override
+                    public void onTabSelected(TabLayout.Tab tab) {
+                        binding.tvFill.setText(beans.get(tab.getPosition()).getContent());
+                    }
+
+                    @Override
+                    public void onTabUnselected(TabLayout.Tab tab) {
+
+                    }
+
+                    @Override
+                    public void onTabReselected(TabLayout.Tab tab) {
+
+                    }
+                });
+            }
+        });
 
     }
+    public void collapseView(View initialView,View collapsedView){
+        int initialHeight = initialView.getMeasuredHeight();
+        int collapsedHeight = collapsedView.getMeasuredHeight();
+        int distanceToCollapse = (int) (initialHeight - collapsedHeight);
 
-    private PopupWindow initPopUpWindow(View view){
-        PopupWindow popupWindow = new PopupWindow(this);
-        // 璁剧疆甯冨眬鏂囦欢
-        popupWindow.setContentView(view);
-        // 涓轰簡閬垮厤閮ㄥ垎鏈哄瀷涓嶆樉绀猴紝闇�瑕侀噸鏂拌缃竴涓嬪楂�
-        popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
-        popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
-        // 璁剧疆pop閫忔槑鏁堟灉
-        popupWindow.setBackgroundDrawable(new ColorDrawable(0x0000));
-        // 璁剧疆pop鍑哄叆鍔ㄧ敾
-        popupWindow.setAnimationStyle(com.android.app_base.R.style.pop_add);
-        // 璁剧疆pop鑾峰彇鐒︾偣锛屽鏋滀负false鐐瑰嚮杩斿洖鎸夐挳浼氶��鍑哄綋鍓岮ctivity锛屽鏋減op涓湁Editor鐨勮瘽锛宖ocusable蹇呴』瑕佷负true
-        popupWindow.setFocusable(true);
-        // 璁剧疆pop鍙偣鍑伙紝涓篺alse鐐瑰嚮浜嬩欢鏃犳晥锛岄粯璁や负true
-        popupWindow.setTouchable(true);
-        // 璁剧疆鐐瑰嚮pop澶栦晶娑堝け锛岄粯璁や负false锛涘湪focusable涓簍rue鏃剁偣鍑诲渚у缁堟秷澶�
-        popupWindow.setOutsideTouchable(false);
-        return popupWindow;
+        Animation a = new Animation() {
+            @Override
+            protected void applyTransformation(float interpolatedTime, Transformation t) {
+                if (interpolatedTime == 1){
+                }
+                initialView.getLayoutParams().height = (int) (initialHeight - (distanceToCollapse * interpolatedTime));
+                initialView.requestLayout();
+            }
+
+            @Override
+            public boolean willChangeBounds() {
+                return true;
+            }
+        };
+        a.setDuration(500);
+        initialView.startAnimation(a);
     }
+    public void expendView(View initialView){
+        int initialHeight = initialView.getMeasuredHeight();
+        initialView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
+        int targetHeight = initialView.getMeasuredHeight();
+        ValueAnimator animator = ValueAnimator.ofInt(initialHeight,targetHeight);
+        animator.addUpdateListener(animation -> {
+            initialView.getLayoutParams().height = (int) animation.getAnimatedValue();
+            initialView.requestLayout();
+        });
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                initialView.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
+                initialView.setLayoutParams(initialView.getLayoutParams());
+            }
+        });
+        animator.setDuration(500);
+        animator.start();
+    }
+
 }

--
Gitblit v1.9.1