package me.xiaopan.sketchsample.adapter.itemfactory; import android.content.Context; import android.view.View; import android.view.ViewGroup; import butterknife.BindView; import me.xiaopan.assemblyadapter.AssemblyRecyclerItemFactory; 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.net.request.StarImageRequest; import me.xiaopan.sketchsample.util.Settings; import me.xiaopan.sketchsample.widget.MyImageView; public class StaggeredImageItemFactory extends AssemblyRecyclerItemFactory<StaggeredImageItemFactory.StaggeredImageItem> { private OnItemClickListener onItemClickListener; private int itemWidth; public StaggeredImageItemFactory(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @Override public boolean isTarget(Object o) { return o instanceof StarImageRequest.Image; } @Override public StaggeredImageItem createAssemblyItem(ViewGroup viewGroup) { return new StaggeredImageItem(R.layout.list_item_image, viewGroup); } public interface OnItemClickListener { void onItemClick(int position, StarImageRequest.Image image, String loadingImageOptionsInfo); } public class StaggeredImageItem extends BindAssemblyRecyclerItem<StarImageRequest.Image> { @BindView(R.id.image_imageItem) MyImageView imageView; public StaggeredImageItem(int itemLayoutId, ViewGroup parent) { super(itemLayoutId, parent); } @Override protected void onConfigViews(Context context) { imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(getAdapterPosition(), getData(), imageView.getOptionsKey()); } } }); imageView.setOptionsByName(ImageOptions.RECT); } @Override protected void onSetData(int i, StarImageRequest.Image image) { if (itemWidth == 0) { int screenWidth = imageView.getContext().getResources().getDisplayMetrics().widthPixels; itemWidth = (screenWidth - (SketchUtils.dp2px(imageView.getContext(), 4) * 3)) / 2; } ViewGroup.LayoutParams headParams = imageView.getLayoutParams(); headParams.width = itemWidth; headParams.height = (int) (itemWidth / (image.getWidth() / (float) image.getHeight())); imageView.setLayoutParams(headParams); boolean playGifOnList = Settings.getBoolean(imageView.getContext(), Settings.PREFERENCE_PLAY_GIF_ON_LIST); if (playGifOnList != imageView.getOptions().isDecodeGifImage()) { imageView.getOptions().setDecodeGifImage(playGifOnList); } imageView.displayImage(image.getSourceUrl()); } } }