Last active
October 7, 2016 16:40
-
-
Save frogermcs/feba504160bc59ffac6a to your computer and use it in GitHub Desktop.
InstaMaterial source files (RecyclerView done right)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public boolean animateAdd(RecyclerView.ViewHolder viewHolder) { | |
if (viewHolder.getItemViewType() == FeedAdapter.VIEW_TYPE_DEFAULT) { | |
if (viewHolder.getLayoutPosition() > lastAddAnimatedItem) { | |
lastAddAnimatedItem++; | |
runEnterAnimation((FeedAdapter.CellFeedViewHolder) viewHolder); | |
return false; | |
} | |
} | |
dispatchAddFinished(viewHolder); | |
return false; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, | |
@NonNull RecyclerView.ViewHolder newHolder, | |
@NonNull ItemHolderInfo preInfo, | |
@NonNull ItemHolderInfo postInfo) { | |
cancelCurrentAnimationIfExists(newHolder); | |
if (preInfo instanceof FeedItemHolderInfo) { | |
FeedItemHolderInfo feedItemHolderInfo = (FeedItemHolderInfo) preInfo; | |
FeedAdapter.CellFeedViewHolder holder = (FeedAdapter.CellFeedViewHolder) newHolder; | |
animateHeartButton(holder); | |
updateLikesCounter(holder, holder.getFeedItem().likesCount); | |
if (FeedAdapter.ACTION_LIKE_IMAGE_CLICKED.equals(feedItemHolderInfo.updateAction)) { | |
animatePhotoLike(holder); | |
} | |
} | |
return false; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) { | |
return true; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public void endAnimation(RecyclerView.ViewHolder item) { | |
super.endAnimation(item); | |
cancelCurrentAnimationIfExists(item); | |
} | |
@Override | |
public void endAnimations() { | |
super.endAnimations(); | |
for (AnimatorSet animatorSet : likeAnimationsMap.values()) { | |
animatorSet.cancel(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
holder.btnComments.setTag(position); | |
holder.btnMore.setTag(position); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private static final DecelerateInterpolator DECCELERATE_INTERPOLATOR = new DecelerateInterpolator(); | |
private static final AccelerateInterpolator ACCELERATE_INTERPOLATOR = new AccelerateInterpolator(); | |
private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(4); | |
private static final int ANIMATED_ITEMS_COUNT = 2; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private final Map<RecyclerView.ViewHolder, AnimatorSet> likeAnimations = new HashMap<>(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { | |
//... | |
bindLoadingFeedItem(holder); | |
} | |
private void bindDefaultFeedItem(int position, CellFeedViewHolder holder) { | |
//... | |
updateLikesCounter(holder, false); | |
updateHeartButton(holder, false); | |
holder.btnComments.setTag(position); | |
holder.btnMore.setTag(position); | |
holder.ivFeedCenter.setTag(holder); | |
holder.btnLike.setTag(holder); | |
if (likeAnimations.containsKey(holder)) { | |
likeAnimations.get(holder).cancel(); | |
} | |
resetLikeAnimationState(holder); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public void onClick(View view) { | |
//... | |
if (viewId == R.id.btnComments) { | |
//... | |
} else if (viewId == R.id.btnMore) { | |
if (onFeedItemClickListener != null) { | |
onFeedItemClickListener.onMoreClick(view, (Integer) view.getTag()); | |
} | |
} | |
//... | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@NonNull | |
@Override | |
public ItemHolderInfo recordPreLayoutInformation(@NonNull RecyclerView.State state, | |
@NonNull RecyclerView.ViewHolder viewHolder, | |
int changeFlags, @NonNull List<Object> payloads) { | |
if (changeFlags == FLAG_CHANGED) { | |
for (Object payload : payloads) { | |
if (payload instanceof String) { | |
return new FeedItemHolderInfo((String) payload); | |
} | |
} | |
} | |
return super.recordPreLayoutInformation(state, viewHolder, changeFlags, payloads); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private void runEnterAnimation(View view, int position) { | |
if (!animateItems || position >= ANIMATED_ITEMS_COUNT - 1) { | |
return; | |
} | |
if (position > lastAnimatedPosition) { | |
lastAnimatedPosition = position; | |
view.setTranslationY(Utils.getScreenHeight(context)); | |
view.animate() | |
.translationY(0) | |
.setInterpolator(new DecelerateInterpolator(3.f)) | |
.setDuration(700) | |
.start(); | |
} | |
} | |
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { | |
runEnterAnimation(viewHolder.itemView, position); | |
//... | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private boolean showLoadingView = false; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment