Linjiajia
2023-10-26 ecaf8069072e71db4bff94671e72764b211d6af1
app/src/main/java/com/application/zhangshi_app_android/widget/Node.java
@@ -12,12 +12,15 @@
import android.widget.TextView;
import androidx.constraintlayout.utils.widget.ImageFilterView;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import com.android.app_base.manager.AppManager;
import com.android.app_base.utils.GlideUtil;
import com.android.app_base.utils.ScreenSizeUtils;
import com.application.zhangshi_app_android.R;
import com.application.zhangshi_app_android.bean.HomeRootBean;
import com.application.zhangshi_app_android.databinding.ItemFamilyMemberBinding;
import java.util.ArrayList;
import java.util.LinkedList;
@@ -100,7 +103,7 @@
     * 递归设置所有节点的位置
     * @param topNode 顶部节点,这颗节点树的最上边的节点
     * @param rootNode 根节点,这颗节点树的根节点
     *                startNode 必须是 topNode 祖先节点
     *                rootNode 必须是 topNode 祖先节点
     * @param x 整颗节点树的x坐标
     * @param y 整颗节点树的y坐标
     */
@@ -189,6 +192,7 @@
    // 设置对应类型节点的位置 由子类实现
    protected abstract void setViewPosition(int x, int centerY);
    // 设置分叉节点的位置 由子类实现,必须先setViewPosition才能调用
    protected abstract void setForkYList(List<Integer> yList);
    /**
@@ -200,45 +204,39 @@
    protected View createItemView(HomeRootBean bean,boolean isFamily){
        // 使用布局填充器加载节点布局
        LayoutInflater inflater = LayoutInflater.from(context);
        View familyMemberView = inflater.inflate(R.layout.item_family_member, null, false);
        familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST),
                View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST));
        ItemFamilyMemberBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_family_member, null, false);
        View familyMemberView = binding.getRoot();
        // 防止addView时,所有这里创建的view的高宽被限制成一样的
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        familyMemberView.setLayoutParams(params);
        if (bean == null) {
            return familyMemberView;
        }
        // 获取布局中的组件
        TextView tv_generation = familyMemberView.findViewById(R.id.tv_generation);
        ImageFilterView iv_avatar = familyMemberView.findViewById(R.id.iv_avatar);
        TextView tv_name = familyMemberView.findViewById(R.id.tv_name);
        if (!isFamily){
            tv_name.setTextColor(Color.parseColor("#FF8296C5"));
            tv_name.setTypeface(Typeface.DEFAULT);
        }
        // 设置节点内容
        tv_generation.setText(String.valueOf(bean.getIdentity()));
        if (bean.getImg() != null) {
            GlideUtil.loadImage(bean.getImg(), iv_avatar);
        }
        tv_name.setText(bean.getNickName());
        tv_name.setSelected(true);
        familyMemberView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null){
                    onItemClickListener.onItemClick(familyMemberView,bean);
                    onItemClickListener.onItemClick(familyMemberView,bean,isFamily);
                }
            }
        });
        if (bean != null) {
            binding.setBean(bean);
            if (!isFamily){
                binding.tvName.setTextColor(Color.parseColor("#FF8296C5"));
                //获取字体
                Typeface typeface = ResourcesCompat.getFont(context, com.android.app_base.R.font.roboto_regular);
                binding.tvName.setTypeface(typeface);
            }
            // 使用databinding无法测量view的带内容的准确宽高,所以这里手动设置一下
            binding.tvGeneration.setText(bean.getIdentity()+"");
        }
        familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST),
                View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST));
        return familyMemberView;
    }
    protected ImageView createExpandIconView() {
        ImageView expandView = new ImageView(AppManager.getAppManager().currentActivity());
        ImageView expandView = new ImageView(context);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(pathLength,pathLength);
        expandView.setLayoutParams(params);
        int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(pathLength, View.MeasureSpec.EXACTLY);
@@ -468,15 +466,11 @@
    }
    // 获取 每个 itemView 的宽度
    public int getItemViewWidth(){
        View itemView =  createItemView(null,false);
        return itemView.getMeasuredWidth();
    }
    public abstract int getItemViewWidth();
    // 获取 每个 itemView 的高度
    public int getItemViewHeight(){
        View itemView =  createItemView(null,false);
        return itemView.getMeasuredHeight();
    }
    public abstract int getItemViewHeight();
    //获取展开按钮的宽度
    public int getExpandIconWidth(){
        ImageView expandIconView = createExpandIconView();