package org.wikipedia.gallery; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import com.facebook.drawee.view.SimpleDraweeView; import org.wikipedia.R; import org.wikipedia.views.ViewUtil; public class GalleryThumbnailScrollView extends RecyclerView { @NonNull private final Animation mPressAnimation; @NonNull private final Animation mReleaseAnimation; @Nullable private GalleryViewListener mListener; public GalleryThumbnailScrollView(Context context) { this(context, null); } public GalleryThumbnailScrollView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public GalleryThumbnailScrollView(@NonNull Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)); mPressAnimation = AnimationUtils.loadAnimation(context, R.anim.thumbnail_item_press); mReleaseAnimation = AnimationUtils.loadAnimation(context, R.anim.thumbnail_item_release); } public interface GalleryViewListener { void onGalleryItemClicked(String imageName); } public void setGalleryViewListener(@Nullable GalleryViewListener listener) { mListener = listener; } public void setGalleryCollection(@NonNull GalleryCollection collection) { setAdapter(new GalleryViewAdapter(collection)); } private class GalleryItemHolder extends ViewHolder implements OnClickListener, OnTouchListener { private final SimpleDraweeView mImageView; private GalleryItem mGalleryItem; GalleryItemHolder(View itemView) { super(itemView); mImageView = (SimpleDraweeView) itemView.findViewById(R.id.gallery_thumbnail_image); } public void bindItem(GalleryItem item) { mGalleryItem = item; mImageView.setOnClickListener(this); mImageView.setOnTouchListener(this); ViewUtil.loadImageUrlInto(mImageView, mGalleryItem.getThumbUrl()); } @Override public void onClick(View v) { if (mListener != null) { mListener.onGalleryItemClicked(mGalleryItem.getName()); } } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: v.startAnimation(mPressAnimation); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: v.startAnimation(mReleaseAnimation); break; default: break; } return false; } } private final class GalleryViewAdapter extends RecyclerView.Adapter<GalleryItemHolder> { @NonNull private final GalleryCollection mCollection; GalleryViewAdapter(@NonNull GalleryCollection collection) { mCollection = collection; } @Override public int getItemCount() { return mCollection.getItemList().size(); } @Override public GalleryItemHolder onCreateViewHolder(ViewGroup parent, int pos) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_gallery_thumbnail, parent, false); return new GalleryItemHolder(view); } @Override public void onBindViewHolder(GalleryItemHolder holder, int pos) { holder.bindItem(mCollection.getItemList().get(pos)); } } }