package com.application.zhangshi_app_android.ui.function; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.text.Editable; import android.text.TextWatcher; 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.PopupWindow; import androidx.lifecycle.Observer; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.Utils; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.GrowthExperienceAutobiographyBean; import com.application.zhangshi_app_android.bean.HealthCareNotesContentBean; import com.application.zhangshi_app_android.databinding.ActivityHealthCareBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; import com.github.gzuliyujiang.wheelpicker.OptionPicker; import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener; import com.google.android.material.tabs.TabLayout; import com.hjq.bar.TitleBar; import java.util.Arrays; import java.util.List; import java.util.Map; /** * @author Ljj * @date 2023.04.28. 13:51 * @desc 健康保健 Activity */ public class HealthCareActivity extends DLBaseActivity { private PopupWindow popupWindow; @Override public int getLayoutId() { return R.layout.activity_health_care; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { View view = View.inflate(this,R.layout.pop_annual_health_status,null); popupWindow = initPopUpWindow(view); view.findViewById(R.id.tv_edit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); viewModel.setTypeLiveData(true); } }); binding.tvSex.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { List list = Arrays.asList("女","男"); OptionPicker picker = getOptionPicker(list); picker.setTitle("性别"); picker.setOnOptionPickedListener(new OnOptionPickedListener() { @Override public void onOptionPicked(int position, Object item) { binding.tvSex.setText(item.toString()); } }); picker.show(); } }); 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.getHealthCareBaseInfo(); viewModel.getHealthCareLifeHabits(); viewModel.getHealthCareNursingExamination(); viewModel.getHealthCareExistingProblems(); viewModel.getHealthCareNotesContent(); } @Override public void initLiveDataObserve() { viewModel.getIsLifeHabitsExpendedLiveData().observe(this, aBoolean -> { if (aBoolean){ binding.layoutTitleLifeHabits.setOnClickListener(view -> { collapseView(binding.cardLifeHabits,binding.layoutTitleLifeHabits); viewModel.getIsLifeHabitsExpendedLiveData().setValue(false); }); }else { binding.layoutTitleLifeHabits.setOnClickListener(view -> { expendView(binding.cardLifeHabits); viewModel.getIsLifeHabitsExpendedLiveData().setValue(true); }); } }); viewModel.getIsHealthExpendedLiveData().observe(this, aBoolean -> { if (aBoolean){ binding.layoutTitleHealth.setOnClickListener(view -> { collapseView(binding.cardHealth,binding.layoutTitleHealth); viewModel.getIsHealthExpendedLiveData().setValue(false); }); }else { binding.layoutTitleHealth.setOnClickListener(view -> { expendView(binding.cardHealth); viewModel.getIsHealthExpendedLiveData().setValue(true); }); } }); viewModel.getIsNursingExpendedLiveData().observe(this, aBoolean -> { if (aBoolean){ binding.layoutTitleNursing.setOnClickListener(view -> { collapseView(binding.cardNursing,binding.layoutTitleNursing); viewModel.getIsNursingExpendedLiveData().setValue(false); }); }else { binding.layoutTitleNursing.setOnClickListener(view -> { expendView(binding.cardNursing); viewModel.getIsNursingExpendedLiveData().setValue(true); }); } }); viewModel.getTypeLiveData().observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { if (aBoolean){ binding.ivOperate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewModel.setTypeLiveData(false); viewModel.save(); } }); }else { binding.ivOperate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(HealthCareActivity.this,85) +binding.ivOperate.getWidth(),0); } }); } } }); viewModel.getHealthCareNotesContentBeanLiveData().observe(this, new Observer() { @Override public void onChanged(HealthCareNotesContentBean bean) { List tabList = bean.getTabList(); List contentList = bean.getContentList(); if (tabList==null||tabList.size() == 0 ){ binding.etFill.setVisibility(View.GONE); return; }else { binding.etFill.setVisibility(View.VISIBLE); } binding.tabLayout.removeAllTabs(); for (int i = 0; i < tabList.size(); i++) { String tabText = tabList.get(i); 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.etFill.setText(contentList.get(0)); binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { binding.etFill.setText(contentList.get(tab.getPosition())); binding.etFill.clearFocus(); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); binding.etFill.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { int select = binding.tabLayout.getSelectedTabPosition(); contentList.set(select,s.toString()); viewModel.getHealthCareNotesContentBeanLiveData().getValue().setContent(contentList); } @Override public void afterTextChanged(Editable s) { } }); } }); binding.ivA.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("点击了A"); System.out.println(v.isClickable()); System.out.println(viewModel.getTypeLiveData().getValue()); } }); } public void collapseView(View initialView,View collapsedView){ int initialHeight = initialView.getMeasuredHeight(); int collapsedHeight = collapsedView.getMeasuredHeight(); Utils.pullCollapse(initialView,initialHeight,collapsedHeight); } 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(); } @Override public void onLeftClick(TitleBar titleBar) { finish(); } }