package com.lin.poweradapter.example.expandable;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import com.lin.poweradapter.AdapterDelegate;
import com.lin.poweradapter.PowerViewHolder;
import com.lin.poweradapter.ParentExpandViewHolder;
import com.lin.poweradapter.example.R;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Created by lin18 on 2017/4/25.
*/
public class RecipeAdapterDelegate extends AdapterDelegate<IExpand, PowerViewHolder> {
private static final float INITIAL_POSITION = 0.0f;
private static final float ROTATED_POSITION = 180f;
@Override
protected boolean isForViewType(@NonNull IExpand item, int position) {
return item instanceof Recipe;
}
@NonNull
@Override
protected PowerViewHolder onCreateViewHolder(ViewGroup parent) {
return new ChildViewHolder(parent, R.layout.vegetarian_recipe_view);
}
@Override
protected void onBindViewHolder(@NonNull IExpand item, int position, @NonNull PowerViewHolder holder, @NonNull List<Object> payloads) {
ChildViewHolder vh = (ChildViewHolder) holder;
Recipe recipe = (Recipe) item;
vh.textView.setText(recipe.getName());
}
static class ChildViewHolder extends ParentExpandViewHolder {
Unbinder unbinder;
@BindView(R.id.recipe_textview)
TextView textView;
@BindView(R.id.arrow_expand_imageview)
ImageView arrow;
ChildViewHolder(@NonNull ViewGroup parent, @LayoutRes int layoutResId) {
this(LayoutInflater.from(parent.getContext()).inflate(layoutResId, parent, false));
}
public ChildViewHolder(View itemView) {
super(itemView);
unbinder = ButterKnife.bind(this, itemView);
}
@Override
public void setExpanded(boolean expanded) {
super.setExpanded(expanded);
arrow.setRotation(expanded ? ROTATED_POSITION : INITIAL_POSITION);
}
@Override
public void onExpansionToggled(boolean expanded) {
super.onExpansionToggled(expanded);
RotateAnimation rotateAnimation = new RotateAnimation(expanded ? ROTATED_POSITION : -1 * ROTATED_POSITION,
INITIAL_POSITION,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(200);
rotateAnimation.setFillAfter(true);
arrow.startAnimation(rotateAnimation);
}
}
}