WEEX-EEUI 关于eeui TabBar 在release包下使用assets图片资源无法显示问题

前言

从官方公布的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过程种所碰到的坑分享给大家,喜欢的关注一下我哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值