| | |
| | | package com.application.zhangshi_app_android.widget; |
| | | |
| | | import android.content.Context; |
| | | import android.graphics.Color; |
| | | import android.graphics.Path; |
| | | import android.graphics.Typeface; |
| | | import android.view.LayoutInflater; |
| | | import android.view.View; |
| | | import android.view.ViewGroup; |
| | |
| | | * @desc |
| | | */ |
| | | public abstract class Node{ |
| | | protected Context context; |
| | | protected HomeRootBean member;//成员 |
| | | protected Node parent;//父节点 |
| | | protected final List<Node> children = new ArrayList<>(); //子节点 |
| | | |
| | | protected HomeMindMapLayout.OnItemClickListener onItemClickListener; |
| | | protected static final int pathLength = ScreenSizeUtils.dip2px(20);// 连线的一般长度 |
| | | protected static final int cornerRadius = ScreenSizeUtils.dip2px(5); // 连线拐角 圆角半径 |
| | | |
| | |
| | | protected final List<Path> forkPathList = new ArrayList<>();//分叉连线 |
| | | protected final List<View> viewList = new ArrayList<>(); |
| | | |
| | | public Node(HomeRootBean member){ |
| | | public Node(Context context,HomeRootBean member){ |
| | | this.context = context; |
| | | this.member = member; |
| | | if (member != null) { |
| | | // 递归创建子节点 |
| | | if (member.getChildList() != null && member.getChildList().size() > 0) { |
| | | // 所有可见的子节点需要的宽高总和 |
| | | for (HomeRootBean child : member.getChildList()) { |
| | | // 根据是否有配偶创建不同的节点 |
| | | if (child != null) { |
| | | Node node; |
| | | if (child.getSpouse() != null) { |
| | | node = new DoubleNode(child); |
| | | node = new DoubleNode(context,child); |
| | | } else { |
| | | node = new SimpleNode(child); |
| | | node = new SimpleNode(context,child); |
| | | } |
| | | node.parent = this; |
| | | children.add(node); |
| | |
| | | protected abstract void setViewPosition(int x, int centerY); |
| | | protected abstract void setForkYList(List<Integer> yList); |
| | | |
| | | protected View createItemView(HomeRootBean bean) { |
| | | /** |
| | | * 创建节点item视图 |
| | | * @param bean 节点数据 |
| | | * @param isFamily 是否是本家成员 |
| | | * @return 节点item视图 |
| | | */ |
| | | protected View createItemView(HomeRootBean bean,boolean isFamily){ |
| | | // 使用布局填充器加载节点布局 |
| | | LayoutInflater inflater = LayoutInflater.from(AppManager.getAppManager().currentActivity()); |
| | | 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)); |
| | |
| | | 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) { |
| | |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | }); |
| | | return familyMemberView; |
| | | } |
| | | |
| | | protected ImageView createExpandIconView() { |
| | | ImageView expandView = new ImageView(AppManager.getAppManager().currentActivity()); |
| | | FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(pathLength,pathLength); |
| | |
| | | |
| | | // 获取 每个 itemView 的宽度 |
| | | public int getItemViewWidth(){ |
| | | View itemView = createItemView(null); |
| | | View itemView = createItemView(null,false); |
| | | return itemView.getMeasuredWidth(); |
| | | } |
| | | // 获取 每个 itemView 的高度 |
| | | public int getItemViewHeight(){ |
| | | View itemView = createItemView(null); |
| | | View itemView = createItemView(null,false); |
| | | return itemView.getMeasuredHeight(); |
| | | } |
| | | //获取展开按钮的宽度 |
| | |
| | | public int getViewWidth(){ |
| | | return viewBottom - viewTop; |
| | | } |
| | | |
| | | public void setOnItemClickListener(HomeMindMapLayout.OnItemClickListener onItemClickListener) { |
| | | this.onItemClickListener = onItemClickListener; |
| | | //所有的子节点也设置 |
| | | for (Node child : children) { |
| | | child.setOnItemClickListener(onItemClickListener); |
| | | } |
| | | } |
| | | } |