package jp.wasabeef.example.fresco; /** * Copyright (C) 2017 Wasabeef * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.content.Context; import android.graphics.Color; import android.graphics.PointF; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.PipelineDraweeController; import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.facebook.imagepipeline.request.Postprocessor; import java.util.List; import jp.wasabeef.fresco.processors.BlurPostprocessor; import jp.wasabeef.fresco.processors.ColorFilterPostprocessor; import jp.wasabeef.fresco.processors.CombinePostProcessors; import jp.wasabeef.fresco.processors.GrayscalePostprocessor; import jp.wasabeef.fresco.processors.MaskPostprocessor; import jp.wasabeef.fresco.processors.gpu.BrightnessFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.ContrastFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.InvertFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.KuawaharaFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.PixelationFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.SepiaFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.SketchFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.SwirlFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.ToonFilterPostprocessor; import jp.wasabeef.fresco.processors.gpu.VignetteFilterPostprocessor; public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> { private Context context; private List<Type> dataSet; enum Type { Mask, NinePatchMask, ColorFilter, Grayscale, Blur, Toon, Sepia, Contrast, Invert, Pixel, Sketch, Swirl, Brightness, Kuawahara, Vignette, BlurAndGrayscale } public MainAdapter(Context context, List<Type> dataSet) { this.context = context; this.dataSet = dataSet; } @Override public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(context).inflate(R.layout.layout_list_item, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) { Context context = holder.itemView.getContext(); Postprocessor processor = null; holder.drawee.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP); switch (dataSet.get(position)) { case Mask: { processor = new MaskPostprocessor(context, R.drawable.mask_starfish); holder.drawee.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER); break; } case NinePatchMask: { processor = new MaskPostprocessor(context, R.drawable.mask_chat_right); holder.drawee.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE); break; } case ColorFilter: processor = new ColorFilterPostprocessor(Color.argb(80, 255, 0, 0)); break; case Grayscale: processor = new GrayscalePostprocessor(); break; case Blur: processor = new BlurPostprocessor(context, 25); break; case BlurAndGrayscale: processor = new CombinePostProcessors.Builder() .add(new BlurPostprocessor(context, 25)) .add(new GrayscalePostprocessor()) .build(); break; case Toon: processor = new ToonFilterPostprocessor(context); break; case Sepia: processor = new SepiaFilterPostprocessor(context); break; case Contrast: processor = new ContrastFilterPostprocessor(context, 2.0f); break; case Invert: processor = new InvertFilterPostprocessor(context); break; case Pixel: processor = new PixelationFilterPostprocessor(context, 30f); break; case Sketch: processor = new SketchFilterPostprocessor(context); break; case Swirl: processor = new SwirlFilterPostprocessor(context, 0.5f, 1.0f, new PointF(0.5f, 0.5f)); break; case Brightness: processor = new BrightnessFilterPostprocessor(context, 0.5f); break; case Kuawahara: processor = new KuawaharaFilterPostprocessor(context, 25); break; case Vignette: processor = new VignetteFilterPostprocessor(context, new PointF(0.5f, 0.5f), new float[] { 0.0f, 0.0f, 0.0f }, 0f, 0.75f); break; } ImageRequest request = ImageRequestBuilder.newBuilderWithResourceId(R.drawable.demo) .setPostprocessor(processor) .build(); PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder() .setImageRequest(request) .setOldController(holder.drawee.getController()) .build(); holder.drawee.setController(controller); holder.title.setText(dataSet.get(position).name()); } @Override public int getItemCount() { return dataSet.size(); } static class ViewHolder extends RecyclerView.ViewHolder { public SimpleDraweeView drawee; public TextView title; ViewHolder(View itemView) { super(itemView); drawee = (SimpleDraweeView) itemView.findViewById(R.id.image); title = (TextView) itemView.findViewById(R.id.title); } } }