package com.marshalchen.ultimaterecyclerview.expanx.Util; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.os.Build; import android.support.v4.view.animation.LinearOutSlowInInterpolator; import android.view.View; import android.widget.TextView; import com.marshalchen.ultimaterecyclerview.expanx.ExpandableItemData; import java.util.List; /** * Created by hesk on 10/7/15. */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) public abstract class parent<T extends ExpandableItemData> extends BaseViewHolder<T> implements ParentVH<T>, ValueAnimator.AnimatorUpdateListener { public parent(View itemView) { super(itemView); } protected abstract void setCountVisible(int visibility); protected abstract void updateCountNumber(final String text); private void toggleExpenable(final ExpandableItemData itemData, final ItemDataClickListener imageClickListener, final int position) { if (imageClickListener != null) { if (itemData.isExpand()) { imageClickListener.onHideChildren(itemData); itemData.setExpand(false); rotationExpandIcon(openDegree(), closeDegree()); setCountVisible(View.GONE); } else { imageClickListener.onExpandChildren(itemData); itemData.setExpand(true); rotationExpandIcon(closeDegree(), openDegree()); List<ExpandableItemData> children = itemData.getChildren(); if (children != null) { updateCountNumber(String.format("(%s)", children.size())); } onParentItemClick(itemData.toString()); setCountVisible(View.VISIBLE); } } } @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void rotationExpandIcon(float from, float to) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ValueAnimator valueAnimator = ValueAnimator.ofFloat(from, to); valueAnimator.setDuration(150); valueAnimator.setInterpolator(new LinearOutSlowInInterpolator()); valueAnimator.addUpdateListener(this); valueAnimator.start(); } } protected void setHandleInitiatedViewStatus(final ExpandableItemData itemData, View rotationIndicator, TextView count) { if (itemData.isExpand()) { rotationIndicator.setRotation(openDegree()); List<ExpandableItemData> children = itemData.getChildren(); if (children != null) { count.setText(String.format("(%s)", itemData.getChildren() .size())); } count.setVisibility(View.VISIBLE); } else { rotationIndicator.setRotation(closeDegree()); count.setVisibility(View.GONE); count.setText(""); } } protected <V extends View> void setRelativeLayoutClickable(final V clickablelayout, final ExpandableItemData itemData, final ItemDataClickListener imageClickListener, final int position) { clickablelayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toggleExpenable(itemData, imageClickListener, position); } }); } }