package com.gh.common.util; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Animatable; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.view.ViewGroup; import com.facebook.common.executors.CallerThreadExecutor; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.controller.BaseControllerListener; import com.facebook.drawee.controller.ControllerListener; import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; import com.facebook.imagepipeline.image.ImageInfo; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequestBuilder; import com.gh.gamecenter.R; public class ImageUtils { private static ImageUtils singleton; public static ImageUtils getInstance() { if (singleton == null) { synchronized (ImageUtils.class) { if (singleton == null) { singleton = new ImageUtils(); return singleton; } } } return singleton; } // 自适应图片宽高 public void display(final SimpleDraweeView simpleDraweeView, String url, final int width) { ControllerListener listener = new BaseControllerListener(){ @Override public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) { if (imageInfo == null){ return; } ViewGroup.LayoutParams layoutParams = simpleDraweeView.getLayoutParams(); float scale = (float) imageInfo.getHeight() / (float) imageInfo.getWidth(); layoutParams.height = (int)(width * scale); simpleDraweeView.setLayoutParams(layoutParams); } }; simpleDraweeView.setController(Fresco.newDraweeControllerBuilder() .setUri(url) .setControllerListener(listener) .build()); } // 设置缩放类型,设置按压状态下的叠加图 public void display(Resources resources, SimpleDraweeView simpleDraweeView, ScalingUtils.ScaleType scaleType, String url) { simpleDraweeView.setHierarchy(new GenericDraweeHierarchyBuilder(resources) .setFadeDuration(500) .setPressedStateOverlay(new ColorDrawable(resources.getColor(R.color.pressed_bg))) .setPlaceholderImage(R.drawable.ocupy2, ScalingUtils.ScaleType.CENTER) .setBackground(new ColorDrawable(resources.getColor(R.color.placeholder_bg))) .setActualImageScaleType(scaleType) .build()); simpleDraweeView.setImageURI(url); } // 设置占位符 public void display(Resources resources, SimpleDraweeView simpleDraweeView, String url, int placeholderImage) { simpleDraweeView.setHierarchy(new GenericDraweeHierarchyBuilder(resources) .setFadeDuration(500) .setPressedStateOverlay(new ColorDrawable(resources.getColor(R.color.pressed_bg))) .setBackground(new ColorDrawable(resources.getColor(R.color.placeholder_bg))) .setPlaceholderImage(placeholderImage) .build()); simpleDraweeView.setImageURI(url); } // 图片下载监听和设置低高分辨率图片 public void display(SimpleDraweeView simpleDraweeView, String url, String lowUrl, ControllerListener listener) { simpleDraweeView.setController(Fresco.newDraweeControllerBuilder() .setImageRequest(ImageRequest.fromUri(url)) .setControllerListener(listener) .setLowResImageRequest(ImageRequest.fromUri(lowUrl)) // 低分辨率图片 .build()); } // 获取bitmap public void display(Context context, String url, BaseBitmapDataSubscriber dataSubscriber) { ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource(Uri.parse(url)) .setProgressiveRenderingEnabled(true) .build(); Fresco.getImagePipeline() .fetchDecodedImage(imageRequest, context) .subscribe(dataSubscriber, CallerThreadExecutor.getInstance()); } }