package com.github.rubensousa.transitions;
import android.os.Build;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import com.github.rubensousa.transitions.utils.ExpandAnimation;
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private OnClickListener listener;
public Adapter(OnClickListener listener) {
this.listener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_adapter, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(position);
}
@Override
public int getItemCount() {
return 50;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View circleView;
View expandView;
View expandableView;
boolean expanded;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
expandView = itemView.findViewById(R.id.expandView);
expandableView = itemView.findViewById(R.id.expandableView);
circleView = itemView.findViewById(R.id.circleView);
circleView.setOnClickListener(this);
}
public void bind(int position) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
circleView.setTransitionName("transition" + position);
circleView.invalidate();
}
ViewGroup.LayoutParams params = expandView.getLayoutParams();
params.height = expanded ?
itemView.getResources().getDimensionPixelOffset(R.dimen.card_expanded_height)
: itemView.getResources().getDimensionPixelOffset(R.dimen.card_default_height);
expandView.setLayoutParams(params);
expandableView.setAlpha(expanded ? 1.0f : 0.0f);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.circleView) {
if (listener != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
listener.onItemClick(v, v.getTransitionName(), getAdapterPosition());
} else {
listener.onItemClick(v, "", getAdapterPosition());
}
}
} else {
expandOrCollapse();
}
}
private void expandOrCollapse() {
int expandedHeight = itemView.getResources()
.getDimensionPixelOffset(R.dimen.card_expanded_height);
int defaultHeight = itemView.getResources()
.getDimensionPixelOffset(R.dimen.card_default_height);
if (expanded) {
int tmp = defaultHeight;
defaultHeight = expandedHeight;
expandedHeight = tmp;
}
ExpandAnimation expandAnimation = new ExpandAnimation(expandView, defaultHeight,
expandedHeight);
expandAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
expandAnimation.setDuration(375);
expandAnimation.start();
expandableView.animate().alpha(expanded ? 0.0f : 1.0f).setStartDelay(75);
expanded = !expanded;
}
}
public interface OnClickListener {
void onItemClick(View sharedView, String transitionName, int position);
}
}