| | |
| | | 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; |
| | |
| | | * 递归设置所有节点的位置 |
| | | * @param topNode 顶部节点,这颗节点树的最上边的节点 |
| | | * @param rootNode 根节点,这颗节点树的根节点 |
| | | * startNode 必须是 topNode 祖先节点 |
| | | * rootNode 必须是 topNode 祖先节点 |
| | | * @param x 整颗节点树的x坐标 |
| | | * @param y 整颗节点树的y坐标 |
| | | */ |
| | |
| | | |
| | | // 设置对应类型节点的位置 由子类实现 |
| | | protected abstract void setViewPosition(int x, int centerY); |
| | | // 设置分叉节点的位置 由子类实现,必须先setViewPosition才能调用 |
| | | protected abstract void setForkYList(List<Integer> yList); |
| | | |
| | | /** |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | // 获取 每个 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(); |