`

Weex加载Android本地图片

 
阅读更多

       最近和几个同事想搞一个app项目,但是原生技术储备有限,在技术选择方面遇到一些困难,LZ以前有使用过cordova的经验,但是一直受制于它js展现能力和内存占用过大的弊端,想要尝试一些更新的技术,例如react-native,还有去年阿里开源的weex项目,这两种技术都是采用当前最流行的前端框架,封装了android和ios的原生能力,体验度和原生几乎无差异,在一番权衡之后,我们开启了填埋weex大坑的道路。

       weex的安装和部署过程等有机会了再说,在开发的过程中遇到了一个加载本地图片的问题,现在就把解决方法贴出来,供大家参考。

       首先加载本地图片需要一个第三方类库,在build.gradle加入如下配置

classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.5.0'

       接下来是加载本地图片的工具类

package com.example.weex.letu;

import android.widget.ImageView;

import com.nostra13.universalimageloader.core.ImageLoader;

/**
 * 异步加载本地图片工具类
 *
 * @author songfeng
 *
 */
public class LoadLocalImageUtil {
    private LoadLocalImageUtil() {
    }

    private static LoadLocalImageUtil instance = null;

    public static synchronized LoadLocalImageUtil getInstance() {
        if (instance == null) {
            instance = new LoadLocalImageUtil();
        }
        return instance;
    }

    /**
     * 从内存卡中异步加载本地图片
     *
     * @param uri
     * @param imageView
     */
    public void displayFromSDCard(String uri, ImageView imageView) {
        // String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
        ImageLoader.getInstance().displayImage("file://" + uri, imageView);
    }

    /**
     * 从assets文件夹中异步加载图片
     *
     * @param imageName
     *            图片名称,带后缀的,例如:1.png
     * @param imageView
     */
    public void dispalyFromAssets(String imageName, ImageView imageView) {
        // String imageUri = "assets://image.png"; // from assets
        ImageLoader.getInstance().displayImage("assets://" + imageName,
                imageView);
    }

    /**
     * 从drawable中异步加载本地图片
     *
     * @param imageId
     * @param imageView
     */
    public void displayFromDrawable(int imageId, ImageView imageView) {
        // String imageUri = "drawable://" + R.drawable.image; // from drawables
        // (only images, non-9patch)
        ImageLoader.getInstance().displayImage("drawable://" + imageId,
                imageView);
    }

    /**
     * 从内容提提供者中抓取图片
     */
    public void displayFromContent(String uri, ImageView imageView) {
        // String imageUri = "content://media/external/audio/albumart/13"; //
        // from content provider
        ImageLoader.getInstance().displayImage("content://" + uri, imageView);
    }

}

       然后是要对ImageLoader进行注册,修改WXApplication

    @Override
    public void onCreate() {
        super.onCreate();
        InitConfig config=new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build();
        WXSDKEngine.initialize(this,config);
        initImageLoader(this.getApplicationContext());
    }

    private void initImageLoader(Context context) {
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                context).threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .writeDebugLogs()
                .build();
        ImageLoader.getInstance().init(config);
    }

      weex官方的demo里面已经集成了img标签的能力,但是只有网络请求图片的功能,现在我们把加载android本地图片的逻辑也加进去,在weex官方提供的ImageAdapter类的setImage方法中加入如下代码(*包起来的部分)

if (view.getLayoutParams().width <= 0 || view.getLayoutParams().height <= 0) {
    return;
}
*********************************
if (url.contains("/assets/")) {
    LoadLocalImageUtil.getInstance().dispalyFromAssets(url.replace("/assets/",""), view);
    return;
}
**********************************
if(!TextUtils.isEmpty(strategy.placeHolder)){
    Picasso.Builder builder=new Picasso.Builder(WXEnvironment.getApplication());
    Picasso picasso=builder.build();
    picasso.load(Uri.parse(strategy.placeHolder)).into(view);
    view.setTag(strategy.placeHolder.hashCode(),picasso);
}

       最后自然是图片加载了,在vue文件中如下设置:

<image class="backgroundimage" src="assets/img/login.jpg"></image>

       这样的数据结构是为了浏览器调试方便,也便于以理解,你们可以根据自己的喜好进行修改,提醒一下图片要放在android\app\src\main\assets目录下,目录层级自己定义。基本的流程就是这样,并不复杂,希望对遇到该问题的开发者有所帮助。

0
0
分享到:
评论

相关推荐

    weex android实现本地图片加载image播放gif动画扩展module获取版本号

    weex android实现本地图片加载image播放gif动画扩展module获取版本号 博客地址:http://blog.csdn.net/codingandroid/article/details/77719557

    weex android Demo

    7. **自定义模块与组件**:如果 Weex 内置的组件和模块不能满足需求,开发者可以自定义 Android 本地模块和组件,然后在 JavaScript 代码中调用。这增强了 Weex 的扩展性。 8. **更新策略**:Weex 支持热更新,即在...

    安卓比较复杂的weex例子

    要在 Android 项目中使用 Weex,首先需要在 build.gradle 文件中添加 Weex SDK 的依赖。然后在 AndroidManifest.xml 中配置相应的权限,并在 Activity 中初始化 Weex 实例,加载对应的 Weex 页面。 3. **仿商场...

    ios集成weex案例

    Weex由阿里巴巴开源,旨在提供一种跨平台的开发解决方案,支持iOS、Android以及Web。本案例将深入探讨如何在iOS项目中集成Weex。 首先,我们需要了解Weex的基本概念。Weex是一个基于Vue.js的移动应用开发框架,它的...

    WEEX开发严选App

    WEEX支持动态加载资源,使得应用的界面和交互更为丰富。 3. **配置文件**:如webpack.config.js,这是构建工具Webpack的配置文件,用于处理源码的打包和优化。Webpack将JavaScript、CSS、图片等资源整合成单个...

    WeexLean简单的扫码调试weex页面的工具源码

    2. 扫描的二维码应包含有效的Weex页面链接,否则可能无法预览或加载页面。 3. 在扫描过程中,保持二维码与摄像头的距离适中,以便于扫描器准确识别。 4. 对于复杂的Weex页面,可能需要对ZXing库进行进一步的优化以...

    基于Weex的小程序系统设计.pdf

    Weex是阿里巴巴集团提供的一个开源项目,其目的是利用Web开发者熟悉的JavaScript语言和Vue框架等前端技术,实现一套通用的跨平台开发方案,支持Android、iOS和Web应用的开发。通过Weex,开发者可以减少为不同平台...

    适合前端Vue开发童鞋的跨平台Weex的使用详解

    对于调试和问题诊断,weex-doctor插件可以帮助开发者检查本地开发环境配置是否正确,weex-debugger插件则用于在VSCode中启动Weex应用的调试工具。 Weex的这些特点和工作原理,使其成为了Vue.js前端开发者在选择...

    手机淘宝 H5 和 Weex 容器的构建实践.pdf

    Weex则是阿里巴巴推出的一套跨平台的前端框架,它允许开发者使用统一的Vue.js开发语法来编写原生应用,这样开发者可以同时开发iOS、Android以及Web应用,大大减少了开发成本。 二、网络信息安全在构建中的重要性 ...

    基于 WeexSDK 实现的 iOS工程,可结合 BMFE_scaffold 脚手架快速开始开发 App.zip

    BMKit 是一个用于Weex的扩展库,包含了很多实用的功能模块,如网络请求、图片加载、数据存储等,能帮助开发者更便捷地进行业务开发。 在“WeexEros-master”这个压缩包中,我们可以看到一个典型的Weex iOS项目的...

    WeexAliPlayer源码.zip

    Weex是一个开源的移动跨平台开发框架,它可以让开发者用一套代码实现iOS、Android以及Web端的应用开发。而AliPlayer是阿里云提供的一个强大且功能丰富的多媒体播放器,支持多种格式的视频播放。 在这个压缩包文件...

    weex里Vuex state使用storage持久化详解

    它是Weex提供的一个用于本地数据存储的模块,可以用来存储、修改和删除数据,且数据会永久保存,除非手动清除。在H5环境下,由于使用了HTML5的LocalStorage API,存储空间限制为5MB;而在Android和iOS平台上则没有这...

    自定义时间,地点城市选择控件

    - **数据源**:城市数据一般来源于数据库或者网络API,需要预先加载并存储在本地。 - **实现方式**:可以使用`ListView`、`RecyclerView`等滚动列表控件来展示城市列表,配合搜索功能方便用户快速定位。 - **多级...

    REACT NATIVE大型项目通用化架构.pdf

    性能优化是指在REACT NATIVE中使用各种技术来提高应用程序的性能,例如tcp替换http、数据本地缓存、并行加载获取数据、减少jsBundle体积、lazyload js module等。这些技术可以提高应用程序的性能和响应速度。 REACT...

    移动端:手把手带你入门跨平台UI开发框架Flutter,看完这篇-flutter框架

    - **Dart语言**: Dart代码通过AOT编译为本地机器码,这使得Flutter可以直接与平台通信,无需通过JavaScript桥接。 #### 四、Flutter的关键特点 ##### 4.1 跨平台性 - **共享代码库**: Flutter允许开发者使用一套...

    uni-app跨平台前端框架介绍(终极跨平台解决方案)

    - **兼容Weex原生渲染**:在App端支持Weex原生渲染,提供更流畅的交互体验。 3. **通用前端技术栈,降低学习成本** - **学习成本低**:基于Vue.js语法和微信小程序API,使得开发者能够快速上手。 - **内嵌mpvue...

    vue笔记发布 (2).txt

    - **Weex**:由阿里巴巴推出,是一种跨平台的移动应用开发方案,支持Android和iOS两大平台。 - **Chameleon**:滴滴出行发布的跨平台解决方案,支持多种终端设备。 - **Uni-app**:由DCloud开发,同样是一种跨平台的...

Global site tag (gtag.js) - Google Analytics