package me.xiaopan.sketchsample.adapter.itemfactory; import android.content.Context; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.view.ViewGroup; import butterknife.BindView; import me.xiaopan.assemblyadapter.AssemblyRecyclerItemFactory; import me.xiaopan.sketch.SketchImageView; import me.xiaopan.sketch.request.DisplayOptions; import me.xiaopan.sketch.shaper.ImageShaper; import me.xiaopan.sketch.shaper.RoundRectImageShaper; import me.xiaopan.sketch.util.SketchUtils; import me.xiaopan.sketchsample.ImageOptions; import me.xiaopan.sketchsample.R; import me.xiaopan.sketchsample.adapter.BindAssemblyRecyclerItem; import me.xiaopan.sketchsample.util.Settings; import me.xiaopan.sketchsample.widget.MyImageView; public class PhotoAlbumItemFactory extends AssemblyRecyclerItemFactory<PhotoAlbumItemFactory.PhotoAlbumItem> { private OnImageClickListener onImageClickListener; private int itemSize; public PhotoAlbumItemFactory(OnImageClickListener onImageClickListener) { this.onImageClickListener = onImageClickListener; } @Override public boolean isTarget(Object o) { return o instanceof String; } @Override public PhotoAlbumItem createAssemblyItem(ViewGroup viewGroup) { if (itemSize == 0) { itemSize = -1; if (viewGroup instanceof RecyclerView) { int spanCount = 1; RecyclerView recyclerView = (RecyclerView) viewGroup; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { spanCount = ((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount(); } else if (layoutManager instanceof StaggeredGridLayoutManager) { spanCount = ((StaggeredGridLayoutManager) recyclerView.getLayoutManager()).getSpanCount(); } if (spanCount > 1) { int screenWidth = viewGroup.getResources().getDisplayMetrics().widthPixels; itemSize = (screenWidth - (SketchUtils.dp2px(viewGroup.getContext(), 4) * (spanCount + 1))) / spanCount; } } } return new PhotoAlbumItem(R.layout.list_item_photo_album_image, viewGroup); } public interface OnImageClickListener { void onImageClick(int position, String loadingImageOptionsId); } public class PhotoAlbumItem extends BindAssemblyRecyclerItem<String> { @BindView(R.id.image_photoAlbumImageItem) MyImageView sketchImageView; public PhotoAlbumItem(int itemLayoutId, ViewGroup parent) { super(itemLayoutId, parent); } @Override protected void onConfigViews(Context context) { sketchImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onImageClickListener != null) { onImageClickListener.onImageClick(getAdapterPosition(), getData()); } } }); sketchImageView.setOptionsByName(ImageOptions.RECT); ImageShaper imageShaper = sketchImageView.getOptions().getImageShaper(); if (imageShaper != null && imageShaper instanceof RoundRectImageShaper) { RoundRectImageShaper roundRectImageShaper = (RoundRectImageShaper) imageShaper; sketchImageView.setImageShape(SketchImageView.ImageShape.ROUNDED_RECT); sketchImageView.setImageShapeCornerRadius(roundRectImageShaper.getOuterRadii()); } if (itemSize > 0) { ViewGroup.LayoutParams layoutParams = sketchImageView.getLayoutParams(); layoutParams.width = itemSize; layoutParams.height = itemSize; sketchImageView.setLayoutParams(layoutParams); } } @Override protected void onSetData(int i, String imageUri) { boolean thumbnailMode = Settings.getBoolean(sketchImageView.getContext(), Settings.PREFERENCE_THUMBNAIL_MODE); DisplayOptions options = sketchImageView.getOptions(); options.setThumbnailMode(thumbnailMode); options.setCacheProcessedImageInDisk(Settings.getBoolean(sketchImageView.getContext(), Settings.PREFERENCE_CACHE_PROCESSED_IMAGE)); if (thumbnailMode) { if (options.getResize() == null && !options.isResizeByFixedSize()) { options.setResizeByFixedSize(true); } } else { options.setResizeByFixedSize(false); } boolean playGifOnList = Settings.getBoolean(sketchImageView.getContext(), Settings.PREFERENCE_PLAY_GIF_ON_LIST); if (playGifOnList != options.isDecodeGifImage()) { options.setDecodeGifImage(playGifOnList); } sketchImageView.displayImage(imageUri); } } }