WEEX-EEUI 关于eeui TabBar 在release包下使用assets图片资源无法显示问题
程序员文章站
2022-06-01 22:22:17
...
前言
从官方公布的weex框架学习,转到eeui学习之后。感觉坑没有之前那么大,那么多了。
问题
今天遇到一个问题,使用eeui的TabBar之后,打包的release包看不到图片配置的selecticon和unselecticon图片,仔细想想没有这个问题,猜想应该是本地图片路径的问题。
找到TabBar组件 找到对应的selectIcon,查看selectIcon在从vue传到原生之后selectIcon的值先后进行了那些变化
先秀出我的修改之前和修改之后的代码,左边是之前,右边是之后
找到核心关键类
app.eeui.framework.extend.view.tablayout.CommonTabLayout.java
找到关键类之后,定位到setImageView方法
在方法入口打上断点,这里有个技巧如何触发断点,可以修改一下vue文件ctrl+s来触发刷新,断点就会走到这里
观察断点,我们看到file://assets/打头的本地路径
我们可以对比一下ImageAdapter类打印的本地路径
找到app.eeui.framework.extend.adapter.ImageAdapter.java
定位到loadImage方法,打断点,使用上面介绍的技巧
我们发现:本地文件路径是file:///android_asset/打头的,我们顺着loadImage的代码逻辑
展示代码
Log.i("ImageAdapter_loadImage",url);
String tempUrl = eeuiBase.config.verifyFile(eeuiPage.rewriteUrl(view, handCachePageUrl(view.getContext(), url)));
if (tempUrl.startsWith("file://assets/")) {
tempUrl = "file:///android_asset/" + tempUrl.substring(14);
}
Log.d(TAG, "loadImage: " + tempUrl);
Picasso.with(view.getContext()).load(tempUrl).into(view, new Callback() {
@Override
public void onSuccess() {
if (strategy.getImageListener() != null) {
strategy.getImageListener().onImageFinish(url, view, true, null);
}
recordImgLoadResult(strategy.instanceId, 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);
}
recordImgLoadResult(strategy.instanceId, false, null);
}
});
找到这里我们就找到了问题的核心了,剩下的我就细说了,都很简单
拿来主义:
setImageView方法
String finalIconUrl = iconUrl;
// String loadUrl = loadAssetsUrl(eeuiBase.config.verifyFile(eeuiPage.rewriteUrl(icon, iconUrl)));
Log.i("setImageView_loadImage",iconUrl);
iconUrl=iconUrl.replace("../../","root://");
String loadUrl = eeuiBase.config.verifyFile(eeuiPage.rewriteUrl(icon, handCachePageUrl(icon.getContext(), iconUrl)));
if (loadUrl.startsWith("file://assets/")) {
loadUrl = "file:///android_asset/" + loadUrl.substring(14);
}
Log.i("setImageView",loadUrl);
private String handCachePageUrl(Context context, String url) {
if (TextUtils.isEmpty(url)) {
return url;
}
File pageCache = context.getExternalFilesDir("page_cache");
if (pageCache == null) {
return url;
}
File updateFile = context.getExternalFilesDir("update");
if (updateFile == null) {
return url;
}
String cacheUrl = "file://" + pageCache.getPath() + updateFile.getPath() + "/";
if (url.startsWith(cacheUrl)) {
String tmpUrl = url.substring(cacheUrl.length());
if (tmpUrl.contains("/") && NumberUtils.isCreatable(tmpUrl.substring(0, tmpUrl.indexOf("/")))) {
url = "root:/" + tmpUrl.substring(tmpUrl.indexOf("/"));
}
}
return url;
}
后续会持续更新我在学习和使用eeui过程种所碰到的坑分享给大家,喜欢的关注一下我哦
下一篇: 数据库中如何新增一个字段