package com.application.zhangshi_app_android.ui.home; import android.annotation.SuppressLint; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.Observer; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.ScreenSizeUtils; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.HomeRootBean; import com.application.zhangshi_app_android.databinding.FragmentHomeBinding; import com.application.zhangshi_app_android.databinding.PopBasicInformationDoubleBinding; import com.application.zhangshi_app_android.databinding.PopBasicInformationSingleBinding; import com.application.zhangshi_app_android.ui.DLBaseFragment; import com.application.zhangshi_app_android.widget.HomeMindMapLayout; import java.util.List; /** * @author Ljj * @date 2023.3.15 * @desc 家族导图 Fragment */ public class TreeFragment extends DLBaseFragment { private PopupWindow mOperatePopupWindow; public TreeFragment() { } public static TreeFragment newInstance() { TreeFragment fragment = new TreeFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override protected int getLayoutId() { return R.layout.fragment_home; } @Override protected int getVariableId() { return BR.viewModel; } @Override protected void initParam() { } @SuppressLint("ClickableViewAccessibility") @Override protected void initView() { 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_family).setOnClickListener(v -> { AppManager.getAppManager().startActivity(GenealogyActivity.class); mOperatePopupWindow.dismiss(); }); binding.scrollHomeMindMapLayout.setOnItemClickListener(new HomeMindMapLayout.OnItemClickListener() { @Override public void onItemClick(View view, HomeRootBean bean,boolean isFamily) { View contentView; if (bean.getSpouse()!=null) { bean.getSpouse().setSpouse(bean); PopBasicInformationDoubleBinding binding= DataBindingUtil.inflate(getLayoutInflater(),R.layout.pop_basic_information_double,null,false); binding.setSelfBean(bean); binding.setSpouseBean(bean.getSpouse()); binding.setIsFamily(isFamily); contentView = binding.getRoot(); }else { PopBasicInformationSingleBinding binding = DataBindingUtil.inflate(getLayoutInflater(),R.layout.pop_basic_information_single,null,false); binding.setSelfBean(bean); contentView = binding.getRoot(); } PopupWindow popupWindow = new PopupWindow(); // 设置布局文件 popupWindow.setContentView(contentView); // 为了避免部分机型不显示,需要重新设置一下宽高 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_info); // 设置pop获取焦点,如果为false点击返回按钮会退出当前Activity,如果pop中有Editor的话,focusable必须要为true popupWindow.setFocusable(true); // 设置pop可点击,为false点击事件无效,默认为true popupWindow.setTouchable(true); // 设置点击pop外侧消失,默认为false;在focusable为true时点击外侧始终消失 popupWindow.setOutsideTouchable(false); popupWindow.setHeight(binding.zoomLayout.getHeight()); popupWindow.setWidth(binding.zoomLayout.getWidth()); popupWindow.showAsDropDown(binding.titleBar,0,0); } }); } @Override protected void initData() { viewModel.getHomeRootBeanList(); } @Override protected void initLiveDataObserve() { viewModel.getHomeRootBeanLiveData().observe(this, new Observer>() { @Override public void onChanged(List homeRootBeans) { if (homeRootBeans == null || homeRootBeans.size() == 0) { return; } binding.scrollHomeMindMapLayout.setRootMember(homeRootBeans.get(0)); } }); } @Override protected boolean isStatusBarImmersionEnabled() { return true; } }