java接口的隐藏实现_谈谈Java接口与实现的分离以及隐藏实现

本文介绍了一个基于Fresco库的图片加载器实现方案。该方案包括Fresco库的初始化配置、图片展示方法及控制器设置等核心功能。通过自定义OkHttpClient拦截器实现了请求日志记录,并针对不同类型的ImageView提供了灵活的图片加载方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class FrescoImageLoader implements ImageLoader {

private Context mAppContext;

@Override

public void init(@NonNull Context appContext) {

if(Fresco.hasBeenInitialized()) return;

// hold appContext

mAppContext = appContext;

// init fresco

OkHttpClient client = new OkHttpClient.Builder()

.addNetworkInterceptor(chain -> {

DevUtil.d("ImageLoader", "request-url: " + chain.request().url().toString());

return chain.proceed(chain.request());

})

.build();

ImagePipelineConfig config = OkHttpImagePipelineConfigFactory

.newBuilder(appContext, client)

.build();

Fresco.initialize(appContext, config);

}

@Override

public void displayImage(@NonNull ImageView targetView, @NonNull Uri uri, @Nullable LoadListener listener) {

// Fresco

if (targetView instanceof DraweeView) {

DraweeView realView = (DraweeView) targetView;

realView.setController(getDraweeController(realView, uri, listener));

return;

}

// Generic ImageView

targetView.setImageURI(uri);

}

private DraweeController getDraweeController(DraweeView targetView, Uri uri, LoadListener listener) {

DraweeController controller = Fresco.newDraweeControllerBuilder()

.setOldController(targetView.getController())

.setUri(uri)

.setControllerListener(listener == null ? null : new BaseControllerListener() {

@Override

public void onFailure(String id, Throwable throwable) {

super.onFailure(id, throwable);

if (listener != null) {

listener.onFailed(targetView);

}

}

@Override

public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {

super.onFinalImageSet(id, imageInfo, animatable);

if (imageInfo instanceof CloseableBitmap) {

CloseableBitmap image = (CloseableBitmap) imageInfo;

Bitmap resultBitmap = image.getUnderlyingBitmap();

if (listener != null) {

listener.onSuccess(targetView, resultBitmap);

}

}

}

})

.build();

return controller;

}

@Override

public void cancelDisplay(ImageView targetView) {

}

@Override

public void destroy() {

Fresco.shutDown();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值