106 lines
3.9 KiB
Java
106 lines
3.9 KiB
Java
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<ImageInfo> listener = new BaseControllerListener<ImageInfo>(){
|
|
@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<? super ImageInfo> 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());
|
|
}
|
|
|
|
}
|