Linjiajia
2023-09-12 efafbbf142c81c233c71de636a2d3ce9dc2124f0
app/src/main/java/com/application/zhangshi_app_android/ui/function/HealthCareActivity.java
@@ -3,6 +3,8 @@
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;
@@ -10,12 +12,24 @@
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 java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
 * @author Ljj
@@ -25,7 +39,6 @@
public class HealthCareActivity extends DLBaseActivity<ActivityHealthCareBinding,HealthCareActivityViewModel> {
    private PopupWindow popupWindow;
    private int popWidth;
    @Override
    public int getLayoutId() {
        return R.layout.activity_health_care;
@@ -53,29 +66,73 @@
                AppManager.getAppManager().startActivity(AnnualHealthStatusActivity.class);
            }
        });
        binding.ivOperate.setOnClickListener(v -> {
            popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,118) +binding.ivOperate.getWidth(),0);
        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<String> 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() {
        System.out.println("我"+binding.ivA.isClickable());
        viewModel.getIsLifeHabitsExpendedLiveData().observe(this, aBoolean -> {
            if (aBoolean){
                binding.ivLifeHabitsFold.setOnClickListener(view -> {
                binding.layoutTitleLifeHabits.setOnClickListener(view -> {
                    collapseView(binding.cardLifeHabits,binding.layoutTitleLifeHabits);
                    viewModel.getIsLifeHabitsExpendedLiveData().setValue(false);
                });
            }else {
                binding.ivLifeHabitsFold.setOnClickListener(view -> {
                binding.layoutTitleLifeHabits.setOnClickListener(view -> {
                    expendView(binding.cardLifeHabits);
                    viewModel.getIsLifeHabitsExpendedLiveData().setValue(true);
                });
@@ -83,12 +140,12 @@
        });
        viewModel.getIsHealthExpendedLiveData().observe(this, aBoolean -> {
            if (aBoolean){
                binding.ivHealthFold.setOnClickListener(view -> {
                binding.layoutTitleHealth.setOnClickListener(view -> {
                    collapseView(binding.cardHealth,binding.layoutTitleHealth);
                    viewModel.getIsHealthExpendedLiveData().setValue(false);
                });
            }else {
                binding.ivHealthFold.setOnClickListener(view -> {
                binding.layoutTitleHealth.setOnClickListener(view -> {
                    expendView(binding.cardHealth);
                    viewModel.getIsHealthExpendedLiveData().setValue(true);
                });
@@ -96,15 +153,111 @@
        });
        viewModel.getIsNursingExpendedLiveData().observe(this, aBoolean -> {
            if (aBoolean){
                binding.ivNursingFold.setOnClickListener(view -> {
                binding.layoutTitleNursing.setOnClickListener(view -> {
                    collapseView(binding.cardNursing,binding.layoutTitleNursing);
                    viewModel.getIsNursingExpendedLiveData().setValue(false);
                });
            }else {
                binding.ivNursingFold.setOnClickListener(view -> {
                binding.layoutTitleNursing.setOnClickListener(view -> {
                    expendView(binding.cardNursing);
                    viewModel.getIsNursingExpendedLiveData().setValue(true);
                });
            }
        });
        viewModel.getTypeLiveData().observe(this, new Observer<Boolean>() {
            @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,118) +binding.ivOperate.getWidth(),0);
                        }
                    });
                }
            }
        });
        viewModel.getHealthCareNotesContentBeanLiveData().observe(this, new Observer<HealthCareNotesContentBean>() {
            @Override
            public void onChanged(HealthCareNotesContentBean bean) {
                List<String> tabList = bean.getTabList();
                List<String> 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());
            }
        });
    }
@@ -112,29 +265,13 @@
    public void collapseView(View initialView,View collapsedView){
        int initialHeight = initialView.getMeasuredHeight();
        int collapsedHeight = collapsedView.getMeasuredHeight();
        int distanceToCollapse = (int) (initialHeight - collapsedHeight);
        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);
        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();