package io.github.froger.instamaterial.ui.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.util.Arrays;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.BindView;
import io.github.froger.instamaterial.R;
import io.github.froger.instamaterial.Utils;
/**
* Created by Miroslaw Stanek on 20.01.15.
*/
public class UserProfileAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int PHOTO_ANIMATION_DELAY = 600;
private static final Interpolator INTERPOLATOR = new DecelerateInterpolator();
private final Context context;
private final int cellSize;
private final List<String> photos;
private boolean lockedAnimations = false;
private int lastAnimatedItem = -1;
public UserProfileAdapter(Context context) {
this.context = context;
this.cellSize = Utils.getScreenWidth(context) / 3;
this.photos = Arrays.asList(context.getResources().getStringArray(R.array.user_photos));
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(context).inflate(R.layout.item_photo, parent, false);
StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
layoutParams.height = cellSize;
layoutParams.width = cellSize;
layoutParams.setFullSpan(false);
view.setLayoutParams(layoutParams);
return new PhotoViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
bindPhoto((PhotoViewHolder) holder, position);
}
private void bindPhoto(final PhotoViewHolder holder, int position) {
Picasso.with(context)
.load(photos.get(position))
.resize(cellSize, cellSize)
.centerCrop()
.into(holder.ivPhoto, new Callback() {
@Override
public void onSuccess() {
animatePhoto(holder);
}
@Override
public void onError() {
}
});
if (lastAnimatedItem < position) lastAnimatedItem = position;
}
private void animatePhoto(PhotoViewHolder viewHolder) {
if (!lockedAnimations) {
if (lastAnimatedItem == viewHolder.getPosition()) {
setLockedAnimations(true);
}
long animationDelay = PHOTO_ANIMATION_DELAY + viewHolder.getPosition() * 30;
viewHolder.flRoot.setScaleY(0);
viewHolder.flRoot.setScaleX(0);
viewHolder.flRoot.animate()
.scaleY(1)
.scaleX(1)
.setDuration(200)
.setInterpolator(INTERPOLATOR)
.setStartDelay(animationDelay)
.start();
}
}
@Override
public int getItemCount() {
return photos.size();
}
static class PhotoViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.flRoot)
FrameLayout flRoot;
@BindView(R.id.ivPhoto)
ImageView ivPhoto;
public PhotoViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
public void setLockedAnimations(boolean lockedAnimations) {
this.lockedAnimations = lockedAnimations;
}
}