package com.aswifter.material.book;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import com.aswifter.material.R;
import com.aswifter.material.common.Utils;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
/**
* Created by erfli on 6/15/16.
*/
public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
private BooksFragment booksFragment;
private final int mBackground;
private List<Book> mBooks = new ArrayList<Book>();
private final TypedValue mTypedValue = new TypedValue();
private static final int ANIMATED_ITEMS_COUNT = 4;
private boolean animateItems = false;
private int lastAnimatedPosition = -1;
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(BooksFragment booksFragment, Context context) {
this.booksFragment = booksFragment;
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.resourceId;
}
private void runEnterAnimation(View view, int position) {
if (!animateItems || position >= ANIMATED_ITEMS_COUNT - 1) {
return;
}
if (position > lastAnimatedPosition) {
lastAnimatedPosition = position;
view.setTranslationY(Utils.getScreenHeight(booksFragment.getActivity()));
view.animate()
.translationY(0)
.setStartDelay(100 * position)
.setInterpolator(new DecelerateInterpolator(3.f))
.setDuration(700)
.start();
}
}
public void updateItems(List<Book> books, boolean animated) {
animateItems = animated;
lastAnimatedPosition = -1;
mBooks.addAll(books);
notifyDataSetChanged();
}
public void clearItems() {
mBooks.clear();
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.book_item, parent, false);
//v.setBackgroundResource(mBackground);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
runEnterAnimation(holder.itemView, position);
Book book = mBooks.get(position);
holder.tvTitle.setText(book.getTitle());
String desc = "作者: " + (book.getAuthor().length > 0 ? book.getAuthor()[0] : "") + "\n副标题: " + book.getSubtitle()
+ "\n出版年: " + book.getPubdate() + "\n页数: " + book.getPages() + "\n定价:" + book.getPrice();
holder.tvDesc.setText(desc);
Glide.with(holder.ivBook.getContext())
.load(book.getImage())
.fitCenter()
.into(holder.ivBook);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mBooks.size();
}
public Book getBook(int pos) {
return mBooks.get(pos);
}
}