weex android 简书,Weex加载图片-Android篇

Weex加载图片

写在前面

这里只关注Android平台,对ios平台研究的不多,针对不同的平台,可能要做一些微调,示例项目是基于weexpack创建打包的

加载drawable中的图片

对于路径的说明,请参考 官方文档,weex可以加载drawable中的资源图片,image 需要给定height和width 才能显示,ios平台需要将图片放在 bundle resources

通过WeexSDK的源码可以看到,对于 local Schemes的图片的加载方式

// com.taobao.weex.ui.component.WXImage

private void setLocalSrc(Uri rewrited) {

ImageView imageView;

Drawable localDrawable = ImgURIUtil.getDrawableFromLoaclSrc(getContext(), rewrited);

if (localDrawable != null && (imageView = getHostView()) != null) {

imageView.setImageDrawable(localDrawable);

}

}

//com.taobao.weex.utils.ImgURIUtil

public static Drawable getDrawableFromLoaclSrc(Context context, Uri rewrited) {

Resources resources = context.getResources();

List segments = rewrited.getPathSegments();

if (segments.size() != 1) {

WXLogUtils.e("Local src format is invalid.");

return null;

}

int id = resources.getIdentifier(segments.get(0), "drawable", context.getPackageName());

return id == 0 ? null : ResourcesCompat.getDrawable(resources, id, null);

}

加载本地图片

加载本地图片需要开发者自己实现加载方法,在Application的onCreate中初始化,图片加载器

WXSDKEngine.initialize(this,

new InitConfig.Builder()

.setImgAdapter(new ImageAdapter())

.build()

);

public class ImageAdapter implements IWXImgLoaderAdapter {

@Override

public void setImage(String url, ImageView view, WXImageQuality quality, WXImageStrategy strategy) {

//实现你自己的图片下载,否则图片无法显示。

}

}

在使用weexpack创建的工程中,已经默认实现了加载网络图片,使用的是 Picasso框架加载图片

String temp = url;

if (url.startsWith("//")) {

temp = "http:" + url;

}

Picasso.with(WXEnvironment.getApplication())

.load(temp)

.into(view, new Callback() {

@Override

public void onSuccess() {

if(strategy.getImageListener()!=null){

strategy.getImageListener().onImageFinish(url,view,true,null);

}

if(!TextUtils.isEmpty(strategy.placeHolder)){

((Picasso) view.getTag(strategy.placeHolder.hashCode())).cancelRequest(view);

}

}

@Override

public void onError() {

if(strategy.getImageListener()!=null){

strategy.getImageListener().onImageFinish(url,view,false,null);

}

}

});

可以参考上面的方式自己实现加载assets中的图片资源

if(url.startsWith("assets")){

int index = url.indexOf(":");

String tempUrl = url.substring(index + 1,url.length());

temp = "file:///android_asset/dist/static/"+tempUrl;

}

具体的规则可以自己定义

然后在代码中就可以这样写

具体的请参考 官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值