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